WPF工具栏的样式无法正常工作

时间:2017-11-22 15:22:38

标签: wpf xaml wpf-style

我在wpf proyect中使用资源字典。 字典有这两种风格:

<Style x:Key="MyMenu" TargetType="Menu">
    <Setter Property="Background" Value="Black"/>
    <Setter Property="Foreground" Value="White"/>
</Style>

<Style x:Key="MyToolbar" TargetType="ToolBar">
    <Setter Property="Background" Value="Black"/>
</Style>

在我的XAML文件中,我使用以下两种样式:

菜单:

<Menu Name="menuMainBar" Style="{DynamicResource MyMenu}" IsMainMenu="True" VerticalAlignment="Top" Margin="0,10,0,0">
        <MenuItem ...
</Menu>

对于工具栏:

<ToolBarTray Name="toolBarTrayRigth_wargames"  Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" Width="50">
            <ToolBar Name="toolBarRigth_wargames" Style="{StaticResource MyToolbar}"  BorderThickness="0,0,1,0">
                        <Button ...
            </ToolBar>
</ToolBarTray>

结果如下:

Menu style working, toolbar style not working

您可以注意到,菜单正确地采用了样式,但工具栏完全不受样式的影响。

我尝试从toolbartray标记中删除所有样式元素,如下所示:

<ToolBarTray Name="toolBarTrayRigth_wargames">
        ...
</ToolBarTray>

现在工具栏正常工作,但正如您所看到的,现在toolbarTray不是我想要的样子(我想要一个垂直工具栏,而不是水平工具栏):

Menu style working, toolbar style working, toolbartray not working

我还尝试直接在xaml文件中设置ToolBar的背景:

<ToolBarTray Name="toolBarTrayRigth_wargames"  Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" Width="50">
            <ToolBar Name="toolBarRigth_wargames" BorderThickness="0,0,1,0"  Background="Black">
                        <Button ...
            </ToolBar>
</ToolBarTray>

......它有效:

Menu style working, toolbar style working, but not using the resource dictionary

但我不想这样做,我想使用资源字典作为我工具栏的风格。

关于如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:1)

我奇怪地发现,如果我将父ToolBarTray的Orientation设置为Horizo​​ntal,那么你的ToolBar样式就可以在ToolBar上设置背景。

我还发现,如果ToolBarTray方向仍为Vertical,则可以设置ToolBar的背景:

<Style x:Key="MyToolbar" TargetType="ToolBar">
    <Style.Triggers>
        <!-- 
        This is intentional. A conventional setter was found not to set the background 
        when the parent ToolBarTray's Orientation was Vertical. 
        -->
        <DataTrigger Binding="{Binding Source={x:Null}}" Value="{x:Null}">
            <Setter Property="Background" Value="Black" />
        </DataTrigger>
    </Style.Triggers>
</Style>

我发现这很奇怪。

答案 1 :(得分:0)

正如@EdPlunkett发现的那样,visibilityFilter中垂直方向的默认模板中有一个奇怪的Setter

Trigger

您可以编辑模板(在 <Trigger Property="Orientation" Value="Vertical"> <Setter Property="Margin" TargetName="Grid" Value="1,3,1,1"/> <Setter Property="Style" TargetName="OverflowButton"> <Setter.Value> <Style TargetType="{x:Type ToggleButton}"> <Setter Property="Background" Value="#FFEEF5FD"/> 面板中,右键单击ToolBar元素&gt;编辑模板&gt;编辑副本...),然后删除此Setter。