c# - 更改部分工具栏的背景

标签 c# wpf toolbar

如何更改标记元素的背景(工具栏的一部分,在 xaml 中)? marked element

<ToolBar Grid.Column="1" x:Name="AdditionalModuleButtonsStackPanel" Background="{x:Null}"/>

我什至不知道该元素是如何调用的。我需要使背景透明。

最佳答案

根据this answer ,

The overflow button unfortunately has a fixed background.

这意味着您必须提供整个模板。这是工具栏的样式(我很早就知道了...),请确保将其包含在您的 XAML 中(我将其添加到我的 Window.Resources 中):

资源:

<Window.Resources>
        <LinearGradientBrush x:Key="ToolBarHorizontalBackground" EndPoint="0,1" StartPoint="0,0">
            <GradientStop Color="#E2E0DB" Offset="0"/>
            <GradientStop Color="#EAE8E4" Offset="0.5"/>
            <GradientStop Color="#D5D2CA" Offset="0.9"/>
            <GradientStop Color="#DBD8D1" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="ToolBarToggleButtonVerticalBackground" EndPoint="1,0" StartPoint="0,0">
            <GradientStop Color="#E6E6E6" Offset="0"/>
            <GradientStop Color="#D2D2D2" Offset="0.5"/>
            <GradientStop Color="#808080" Offset="1"/>
        </LinearGradientBrush>
        <SolidColorBrush x:Key="ToolBarButtonHover" Color="#B6BDD2"/>
        <SolidColorBrush x:Key="ToolBarGripper" Color="#A0A0A0"/>
        <Style x:Key="ToolBarVerticalOverflowButtonStyle" TargetType="{x:Type ToggleButton}">
            <Setter Property="Background" Value="{StaticResource ToolBarToggleButtonVerticalBackground}"/>
            <Setter Property="MinHeight" Value="0"/>
            <Setter Property="MinWidth" Value="0"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Border x:Name="Bd" Background="{TemplateBinding Background}" CornerRadius="0,0,3,3" SnapsToDevicePixels="true">
                            <Canvas HorizontalAlignment="Right" Height="6" Margin="2,7,2,2" SnapsToDevicePixels="true" VerticalAlignment="Bottom" Width="7">
                                <Path Data="M 1.5 1 L 1.5 6" Stroke="White"/>
                                <Path Data="M 0.5 0 L 0.5 5" Stroke="{TemplateBinding Foreground}"/>
                                <Path Data="M 3.5 0.5 L 7 3.5 L 4 6.5 Z" Fill="White"/>
                                <Path Data="M 3 -0.5 L 6 2.5 L 3 5.5 Z" Fill="{TemplateBinding Foreground}"/>
                            </Canvas>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
                            </Trigger>
                            <Trigger Property="IsKeyboardFocused" Value="true">
                                <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="{StaticResource ToolBarGripper}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <LinearGradientBrush x:Key="ToolBarVerticalBackground" EndPoint="1,0" StartPoint="0,0">
            <GradientStop Color="#E2E0DB" Offset="0"/>
            <GradientStop Color="#EAE8E4" Offset="0.5"/>
            <GradientStop Color="#D5D2CA" Offset="0.9"/>
            <GradientStop Color="#DBD8D1" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="ToolBarToggleButtonHorizontalBackground" EndPoint="0,1" StartPoint="0,0">
            <GradientStop Color="#E6E6E6" Offset="0"/>
            <GradientStop Color="#D2D2D2" Offset="0.5"/>
            <GradientStop Color="#808080" Offset="1"/>
        </LinearGradientBrush>
        <Style x:Key="ToolBarHorizontalOverflowButtonStyle" TargetType="{x:Type ToggleButton}">
            <Setter Property="Background" Value="{StaticResource ToolBarToggleButtonHorizontalBackground}"/>
            <Setter Property="MinHeight" Value="0"/>
            <Setter Property="MinWidth" Value="0"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Border x:Name="Bd" Background="{TemplateBinding Background}" CornerRadius="0,3,3,0" SnapsToDevicePixels="true">
                            <Canvas HorizontalAlignment="Right" Height="7" Margin="7,2,2,2" SnapsToDevicePixels="true" VerticalAlignment="Bottom" Width="6">
                                <Path Data="M 1 1.5 L 6 1.5" Stroke="White"/>
                                <Path Data="M 0 0.5 L 5 0.5" Stroke="{TemplateBinding Foreground}"/>
                                <Path Data="M 0.5 4 L 6.5 4 L 3.5 7 Z" Fill="White"/>
                                <Path Data="M -0.5 3 L 5.5 3 L 2.5 6 Z" Fill="{TemplateBinding Foreground}"/>
                            </Canvas>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
                            </Trigger>
                            <Trigger Property="IsKeyboardFocused" Value="true">
                                <Setter Property="Background" TargetName="Bd" Value="{StaticResource ToolBarButtonHover}"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="{StaticResource ToolBarGripper}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <SolidColorBrush x:Key="ToolBarMenuBorder" Color="#666666"/>
        <SolidColorBrush x:Key="ToolBarSubMenuBackground" Color="#F9F8F7"/>
        <Style x:Key="ToolBarThumbStyle" TargetType="{x:Type Thumb}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Border Background="Transparent" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
                            <Rectangle>
                                <Rectangle.Fill>
                                    <DrawingBrush TileMode="Tile" Viewbox="0,0,4,4" Viewport="0,0,4,4" ViewportUnits="Absolute" ViewboxUnits="Absolute">
                                        <DrawingBrush.Drawing>
                                            <DrawingGroup>
                                                <GeometryDrawing Brush="White" Geometry="M 1 1 L 1 3 L 3 3 L 3 1 z"/>
                                                <GeometryDrawing Brush="{StaticResource ToolBarGripper}" Geometry="M 0 0 L 0 2 L 2 2 L 2 0 z"/>
                                            </DrawingGroup>
                                        </DrawingBrush.Drawing>
                                    </DrawingBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="Cursor" Value="SizeAll"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="ToolBarMainPanelBorderStyle" TargetType="{x:Type Border}">
            <Setter Property="Margin" Value="0,0,11,0"/>
            <Setter Property="CornerRadius" Value="3,3,3,3"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
                    <Setter Property="CornerRadius" Value="0,0,0,0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="ToolBarStyle1" TargetType="{x:Type ToolBar}">
            <Setter Property="Background" Value="{StaticResource ToolBarHorizontalBackground}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToolBar}">
                        <Grid x:Name="Grid" Margin="3,1,1,1" SnapsToDevicePixels="true">
                            <Grid x:Name="OverflowGrid" HorizontalAlignment="Right">
                                <ToggleButton x:Name="OverflowButton" Background="Transparent" ClickMode="Press" FocusVisualStyle="{x:Null}" IsChecked="{Binding IsOverflowOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" IsEnabled="{TemplateBinding HasOverflowItems}" Style="{StaticResource ToolBarHorizontalOverflowButtonStyle}"/>
                                <Popup x:Name="OverflowPopup" AllowsTransparency="true" Focusable="false" IsOpen="{Binding IsOverflowOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom" StaysOpen="false">
                                    <Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent">
                                        <Border x:Name="ToolBarSubMenuBorder" BorderBrush="{StaticResource ToolBarMenuBorder}" BorderThickness="1" Background="{StaticResource ToolBarSubMenuBackground}" RenderOptions.ClearTypeHint="Enabled">
                                            <ToolBarOverflowPanel x:Name="PART_ToolBarOverflowPanel" KeyboardNavigation.DirectionalNavigation="Cycle" FocusVisualStyle="{x:Null}" Focusable="true" Margin="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle" WrapWidth="200"/>
                                        </Border>
                                    </Themes:SystemDropShadowChrome>
                                </Popup>
                            </Grid>
                            <Border x:Name="MainPanelBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" Style="{StaticResource ToolBarMainPanelBorderStyle}">
                                <DockPanel KeyboardNavigation.TabIndex="1" KeyboardNavigation.TabNavigation="Local">
                                    <Thumb x:Name="ToolBarThumb" Margin="-3,-1,0,0" Padding="6,5,1,6" Style="{StaticResource ToolBarThumbStyle}" Width="10"/>
                                    <ContentPresenter x:Name="ToolBarHeader" ContentSource="Header" HorizontalAlignment="Center" Margin="4,0,4,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
                                    <ToolBarPanel x:Name="PART_ToolBarPanel" IsItemsHost="true" Margin="0,1,2,2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                </DockPanel>
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsOverflowOpen" Value="true">
                                <Setter Property="IsEnabled" TargetName="ToolBarThumb" Value="false"/>
                            </Trigger>
                            <Trigger Property="Header" Value="{x:Null}">
                                <Setter Property="Visibility" TargetName="ToolBarHeader" Value="Collapsed"/>
                            </Trigger>
                            <Trigger Property="ToolBarTray.IsLocked" Value="true">
                                <Setter Property="Visibility" TargetName="ToolBarThumb" Value="Collapsed"/>
                            </Trigger>
                            <Trigger Property="HasDropShadow" SourceName="OverflowPopup" Value="true">
                                <Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
                                <Setter Property="SnapsToDevicePixels" TargetName="Shdw" Value="true"/>
                                <Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
                            </Trigger>
                            <Trigger Property="Orientation" Value="Vertical">
                                <Setter Property="Margin" TargetName="Grid" Value="1,3,1,1"/>
                                <Setter Property="Style" TargetName="OverflowButton" Value="{StaticResource ToolBarVerticalOverflowButtonStyle}"/>
                                <Setter Property="Height" TargetName="ToolBarThumb" Value="10"/>
                                <Setter Property="Width" TargetName="ToolBarThumb" Value="Auto"/>
                                <Setter Property="Margin" TargetName="ToolBarThumb" Value="-1,-3,0,0"/>
                                <Setter Property="Padding" TargetName="ToolBarThumb" Value="5,6,6,1"/>
                                <Setter Property="Margin" TargetName="ToolBarHeader" Value="0,0,0,4"/>
                                <Setter Property="Margin" TargetName="PART_ToolBarPanel" Value="1,0,2,2"/>
                                <Setter Property="DockPanel.Dock" TargetName="ToolBarThumb" Value="Top"/>
                                <Setter Property="DockPanel.Dock" TargetName="ToolBarHeader" Value="Top"/>
                                <Setter Property="HorizontalAlignment" TargetName="OverflowGrid" Value="Stretch"/>
                                <Setter Property="VerticalAlignment" TargetName="OverflowGrid" Value="Bottom"/>
                                <Setter Property="Placement" TargetName="OverflowPopup" Value="Right"/>
                                <Setter Property="Margin" TargetName="MainPanelBorder" Value="0,0,0,11"/>
                                <Setter Property="Background" Value="{StaticResource ToolBarVerticalBackground}"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="true">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

然后您可以通过执行以下操作来添加样式:

 <Grid>
     <ToolBar x:Name="AdditionalModuleButtonsStackPanel" Background="{x:Null}" Style="{DynamicResource ToolBarStyle1}" />
 </Grid>

关于c# - 更改部分工具栏的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838692/

相关文章:

javascript - 如何将 xml 传递给 C# 中的 View ?

c# - 我可以改进嵌入式 C# 上的 "double.IsNaN( x )"函数调用吗?

extjs4 - ExtJS 4.1 - 如何动态添加项目到工具栏?

c# - CTE 查询在 asp.net 中使用 c# for webform 在数据集中生成错误

c# - XNA 3D 程序的正确 OOP 设计是什么?

c# - 通过等待任务或访问其 Exception 属性未观察到任务的异常

c# - 公开 MVVM 中内置的用户控件的属性

c# - Windows 8.1 平板电脑应用程序开发 - 从哪里开始?

reference - ExtJs 4 对网格中工具栏按钮的引用

android - 工具栏后退箭头不起作用