WPF - 绑定到 Integer/Double 属性 以显示 X 数量的矩形

WPF - Binding to an Integer/Double Property to show X amount of Rectangles

我目前正在尝试设计一个"stats" window,在RPG游戏中可以看到,例如,显示攻击、防御和生命分配了多少点。

例如,我的 Class 中有 属性 Life,而 XAML 中有 WrapPanel我想在其中托管所有这些 Rectangles,这些 Rectangles 将代表 属性 Life 具有的每个点,如果 属性 具有值“ 5",那么 WrapPanel.

里面会出现 5 Rectangles

是否可以仅在 XAML 中使用 DataBinding 来完成此操作而无需编写代码? 如果纯粹这样做是不可能的,是否可以通过编写转换器来实现?

如果其中之一可行,怎么做?

我主要尝试使用 Binding 来实现它,而不是在后端编写代码,以使代码尽可能不臃肿和简单。

编辑: 澄清一下,5 不是最大值,它可以达到数据类型可以达到的最高值,因此您必须考虑到那些 Rectangle 确实必须动态使用 Binding 插入,而不是仅仅插入它们并更改 Visibility。

首先编写一个转换器,根据给定的数字生成项目数组:

public class NumberToItemsConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        return Enumerable.Range(1, System.Convert.ToInt32(value));
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }
}

然后使用物品控制:

<ItemsControl ItemsSource="{Binding Value, Converter={StaticResource numToItems}}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Height="100"
                       Width="20"
                       Margin="5,0,5,0"
                       Fill="Red" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>