我想更改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>
但是,如果我将项目添加到工具栏,则不会显示这些项目:
<ToolBar x:Name="myToolbar">
<Label>test</Label>
</ToolBar>
我不想在模板中添加项目,而是在使用该模板的特定工具栏中添加。
任何人都可以给我一个提示吗?
答案 0 :(得分:5)
问题是您用自己的工具栏替换了工具栏的控件模板。但是您没有在该模板中指定应显示项目的位置。通常你可以通过添加ItemsPresenter:
来实现<ControlTemplate TargetType="{x:Type ToolBar}">
<Border>
<DockPanel VerticalAlignment="Stretch" Height="38">
<ItemsPresenter/>
</DockPanel>
</Border>
</ControlTemplate>
或者在模板内的面板上设置IsItemsHost="True"
:
<ControlTemplate TargetType="{x:Type ToolBar}">
<Border>
<DockPanel IsItemsHost="True" VerticalAlignment="Stretch" Height="38">
</DockPanel>
</Border>
</ControlTemplate>
但是,如果您尝试替换ToolBar的items面板(如我的第二个示例中所示),它将无法工作,因为ToolBar期望ToolBarPanel成为items面板。
答案 1 :(得分:0)
模板定义了控件的呈现方式,对于某些控件,一切都在模板内,控件希望在模板中找到它将操作的命名元素。如果查看ToolBar模板,您可以看到工具栏需要在模板中找到名为PART_ToolBarPanel的元素和名为PART_ToolBarOverflowPanel的元素:
http://msdn.microsoft.com/en-us/library/aa970772.aspx
例如,它需要找到名为PART_ToolBarPanel的元素,以便将项目添加到工具栏。
如果要向工具栏模板添加新元素,通常首先复制现有模板,然后开始添加/删除元素。