我对WPF世界很陌生,我在 ItemsControl 中模板化项目时遇到了一些问题。我需要的是在 ItemsControl (或类似)中模板元素(主要是按钮)。
如果我使用以下XAML代码......
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type Button}">
<Border BorderBrush="AliceBlue"
BorderThickness="3">
<TextBlock Text="Templated!"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<Button>Not templated</Button>
<TextBlock>Text not templated</TextBlock>
</ItemsControl>
...我得到了这个结果:http://img444.imageshack.us/img444/2167/itemscontrolnottemplate.gif
ItemsControl 未将模板应用于按钮或 TextBlock 控件。如果我将 ItemsControl 更改为 ListBox ,就像这样:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type Button}">
<Border BorderBrush="AliceBlue"
BorderThickness="3">
<TextBlock Text="Templated!"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<Button>Not templated</Button>
<TextBlock>Text not templated</TextBlock>
</ListBox>
...然后我得到了这个结果:img814.imageshack.us/img814/6204/listboxtoomuchtemplatin.gif
现在模板已应用于 BOTH 子控件(即使我将 DataType 设置为 Button )。
答案 0 :(得分:17)
很难推断出你想要做什么,但看看这是否有帮助......
普通的旧ItemsControl
如果已经是UI元素,则不会将其子包装在容器中。另一方面,ListBox
要求将其子项包裹在ListBoxItem
中。
如果项目已换行,则会应用ItemTemplate
。如果项目未被包装,则ItemTemplate
也可能不存在。
您几乎总是希望将数据项添加到ItemsControl
,而不是UI元素。然后,您将DataTemplate
与这些数据元素相关联,以定义用于呈现它们的UI元素。
我认为解释你的最终目标对于进一步帮助是必要的。