2017-06-22 51 views
1

我正在尝试设计一个已知在RPG游戏中可见的“统计”窗口,例如,显示分配给多少个点攻击,防御和生活。WPF - 绑定到整数/双重属性以显示X的矩形量

例如,我有房产生活在我的课,在我的XAML我有一个WrapPanel,我想举办该会代表每个点的属性生活了,如果所有这些Rectangles财产有价值“5”,然后5 Rectangles将出现在该WrapPanel内。

是否有可能纯粹在XAML中使用DataBinding而不诉诸编写代码? 如果纯粹做到这一点是不可能的,是否可以通过编写一个转换器来实现?

如果其中之一是可能的,怎么样?

我试图使它大部分与绑定无需在后端编写代码,以尽量减少代码臃肿和简单。

编辑:为了澄清,5不是最大值,它可以高达数据类型可以去,所以你必须考虑那些矩形必须动态插入与绑定,而不是只是插入它们并更改可见性。

+0

为什么downvote?为什么不给予反馈,以便我能够改善内容不满意的问题? –

+0

添加5个矩形,将它们的可见性绑定到stat值,并在绑定中使用'ValueConverter'使其可见,如果该值大于或等于该框的值。 –

+0

如果这些统计数据超过5,你会意识到这是行不通的,对吧?这就是为什么它在一个WrapPanel开始,自动定位水平和垂直取决于有多少... –

回答

2

第一写产生的项目阵列从给定数量的转换器:

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> 
+0

'IsItemsHost'对我来说是新手,MSDN上的文档并没有真正解释它为什么需要,你能详细说明一下吗? –

+0

[这为我填补了空白](https://stackoverflow.com/questions/2859656/what-exactly-does-panel-isitemshost-do)。感谢您向我展示新的东西。 –

+0

@BradleyUffner在这种情况下,它是不需要的(虽然也没有害处),我只是用它,因为我曾经这样做。当你将面板放置在控制模板本身时(如你已经发现的),这是必要的。 – Evk