2

我有一个ToolBar带边界的ItemsSource,我DataTemplateSelector用来确定DataTemplate运行时的(即Button/ ToggleButton)。

我想添加一个Separator DataTemplate,我该怎么做?

4

1 回答 1

3

ToolBar 是一个 ItemsControl,因此它想用“容器”“包装”在 Items/ItemsSource 中定义的项目。容器是可用于显示项目的 UIElement。例如,在 ListBox 的情况下,容器是 ListBoxItem。如果一个项目是正确的类型,那么它也可以是它自己的容器。

此设置允许您将字符串列表传递给 ListBox 并让它显示属性并支持选择、键盘导航、样式等。

在 ToolBar 的情况下,它确实希望它的项目已经是一个容器(即 UIElement)。如果该项目不是 UIElement,那么它将使用 ContentPresenter 包装它。

现在,容器使用 DataTemplateSelecter 来确定如何显示它的项目。但是您需要该项目是按钮、切换按钮、分隔符等。您建议您应该将容器添加到容器显示的 DataTemplate 中。

还有Styles的问题,用这个简单的例子可以看出:

<Window x:Class="TestWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:system="clr-namespace:System;assembly=mscorlib" Title="Main"
        Height="500" Width="500">
    <DockPanel LastChildFill="False">
        <ToolBar DockPanel.Dock="Top">
            <ToolBar.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding}" />
                </DataTemplate>
            </ToolBar.ItemTemplate>
            <system:String>Test1</system:String>
            <system:String>Test2</system:String>
        </ToolBar>
        <ToolBar DockPanel.Dock="Top">
            <Button>Test1</Button>
            <Button>Test2</Button>
        </ToolBar>
    </DockPanel>
</Window>

顶部工具栏中的按钮将以与不在工具栏中相同的外观呈现。底部工具栏中的按钮将获得“工具栏”外观。分隔符也是如此。

您可以像这样手动应用样式:

<Window x:Class="TestWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:system="clr-namespace:System;assembly=mscorlib" Title="Main"
        Height="500" Width="500">
    <DockPanel LastChildFill="False">
        <ToolBar DockPanel.Dock="Top">
            <ToolBar.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding}"
                        Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" /> <!-- Add the Style attribute -->
                </DataTemplate>
            </ToolBar.ItemTemplate>
            <system:String>Test1</system:String>
            <system:String>Test2</system:String>
        </ToolBar>
        <ToolBar DockPanel.Dock="Top">
            <Button>Test1</Button>
            <Button>Test2</Button>
        </ToolBar>
    </DockPanel>
</Window>

分隔符也会有同样的问题。因此,您需要像这样手动应用样式:

<DataTemplate x:Key="MySeparatorTemplate">
    <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</DataTemplate>

您应该能够在 DataTemplateSelector 中使用上面的 DataTemplate,就像使用按钮一样。

于 2011-03-29T11:49:39.903 回答