WPF工具栏 - 自定义样式

Bas*_*sti 1 wpf templates

我想更改wpf工具栏的标准样式.我在控制资源中使用以下样式,它工作正常:

<Style x:Key="{x:Type ToolBar}" TargetType="{x:Type ToolBar}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToolBar}">
                        <Border>
                            <DockPanel VerticalAlignment="Stretch" Height="38">
                            </DockPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
Run Code Online (Sandbox Code Playgroud)

但是,如果我向工具栏添加项目,则不会显示以下项目:

<ToolBar x:Name="myToolbar">
        <Label>test</Label>
    </ToolBar>
Run Code Online (Sandbox Code Playgroud)

我不想在模板中添加项目,而是在使用该模板的特定工具栏中添加项目.

任何人都可以给我一个提示吗?

Pav*_*kov 5

问题是您用自己的工具栏替换了工具栏的控件模板.但是您没有在该模板中指定应显示项目的位置.通常你可以通过添加ItemsPresenter来实现:

<ControlTemplate TargetType="{x:Type ToolBar}">
    <Border>
        <DockPanel VerticalAlignment="Stretch" Height="38">
            <ItemsPresenter/>
        </DockPanel>
    </Border>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

或者通过设置IsItemsHost="True"模板内的面板:

<ControlTemplate TargetType="{x:Type ToolBar}">
    <Border>
        <DockPanel IsItemsHost="True" VerticalAlignment="Stretch" Height="38">
        </DockPanel>
    </Border>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试替换ToolBar的items面板(如我的第二个示例中所示),它将无法工作,因为ToolBar期望ToolBarPanel成为items面板.