Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将全局样式设置为具有现有控件模板的XAML按钮_Wpf_Xaml_Templates_Styles_Controls - Fatal编程技术网

Wpf 如何将全局样式设置为具有现有控件模板的XAML按钮

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

我正在尝试创建一个全局样式,以便当鼠标在应用程序中的任何按钮上移动时,鼠标光标将变为手形。但是,我的按钮有自己的控件模板,使用IsMouseOver触发器,因此我的全局IsMouseOver触发器无法工作。有没有办法绕过这个问题,而不必为每个按钮样式添加触发器的setter

以下是全局样式:

<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有效,但设置全局样式无效。我试图摆脱懒惰,不必编辑每种风格,但这似乎是更好的方式。