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>
我目前正在尝试设计一个"stats" window,在RPG游戏中可以看到,例如,显示攻击、防御和生命分配了多少点。
例如,我的 Class 中有 属性 Life,而 XAML 中有 WrapPanel
我想在其中托管所有这些 Rectangles
,这些 Rectangles
将代表 属性 Life 具有的每个点,如果 属性 具有值“ 5",那么 WrapPanel
.
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>