5

我对 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没有将模板应用于ButtonTextBlock控件。如果我将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

现在模板应用于两个子控件(即使我将DataType设置为仅按钮)。

4

1 回答 1

18

很难推断出你想要做什么,但看看这是否有帮助......

如果它们已经是 UI 元素,则普通的 oldItemsControl不会将其子项包装在容器中。ListBox另一方面,A要求将其子项包裹在 a 中ListBoxItem

如果项目已包装,则将ItemTemplate应用 。如果该项目未包装,则它ItemTemplate也可能不存在。

您几乎总是希望将数据项添加到您的ItemsControl,而不是 UI 元素中。然后,您将DataTemplates 与这些数据元素相关联,以定义用于呈现它们的 UI 元素。

我认为解释你的最终目标对于进一步帮助是必要的。

于 2010-08-13T12:06:04.613 回答