ItemTemplate:ListBox vs ItemsControl

nul*_*ull 5 wpf listbox itemtemplate itemscontrol

我对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>
Run Code Online (Sandbox Code Playgroud)

...我得到这个结果: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>
Run Code Online (Sandbox Code Playgroud)

...然后我得到了这个结果:img814.imageshack.us/img814/6204/listboxtoomuchtemplatin.gif

现在模板应用于两个子控件(即使我将DataType设置为Button).

Ken*_*art 17

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

ItemsControl如果它们已经是UI元素,那么普通旧的将不会将其子包装在容器中.一ListBox,在另一方面,要求其孩子被包裹在一个ListBoxItem.

如果项目被包装,则将ItemTemplate应用该项目.如果物品没有被包裹,那么ItemTemplate也可能不存在.

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

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