Wpf 如何将全局样式设置为具有现有控件模板的XAML按钮
我正在尝试创建一个全局样式,以便当鼠标在应用程序中的任何按钮上移动时,鼠标光标将变为手形。但是,我的按钮有自己的控件模板,使用IsMouseOver触发器,因此我的全局IsMouseOver触发器无法工作。有没有办法绕过这个问题,而不必为每个按钮样式添加触发器的setter 以下是全局样式:Wpf 如何将全局样式设置为具有现有控件模板的XAML按钮,wpf,xaml,templates,styles,controls,Wpf,Xaml,Templates,Styles,Controls,我正在尝试创建一个全局样式,以便当鼠标在应用程序中的任何按钮上移动时,鼠标光标将变为手形。但是,我的按钮有自己的控件模板,使用IsMouseOver触发器,因此我的全局IsMouseOver触发器无法工作。有没有办法绕过这个问题,而不必为每个按钮样式添加触发器的setter 以下是全局样式: <Style TargetType="{x:Type Button}"> <Style.Triggers> <Trigger Property="IsM
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
</Style.Triggers>
</Style>
这是一个按钮:
<Style x:Key="VideoVolumeButtonBaseStyle" TargetType="{x:Type Button}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Foreground" Value="{StaticResource DefaultColorBrush}"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Height" Value="27"/>
<Setter Property="Width" Value="31"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="ContentBorder" CornerRadius="3" Background="Transparent" BorderBrush="Transparent" BorderThickness="2">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<ContentPresenter Name="contentPresenter" Content="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true"/>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="{StaticResource FocusedColorBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Foreground" Value="{StaticResource FocusedColorBrush}"/>
<Setter Property="Margin" Value="1,-2,0,0" TargetName="contentPresenter"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledColorBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您只需使用将以后的样式
基于您的全局样式
:
<Style x:Key="GlobalStyle" TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}"
BasedOn="{StaticResource GlobalStyle}">
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource GlobalStyle}" />
谢谢,BasedOn有效,但设置全局样式无效。我试图摆脱懒惰,不必编辑每种风格,但这似乎是更好的方式。