C# 设置背景将禁用鼠标悬停效果

C# 设置背景将禁用鼠标悬停效果,c#,wpf,C#,Wpf,这是我的风格: <UserControl.Resources> <Style TargetType="Button" x:Key="Style2" BasedOn="{StaticResource MetroCircleButtonStyle}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True">

这是我的风格:

   <UserControl.Resources>
    <Style TargetType="Button" x:Key="Style2" BasedOn="{StaticResource MetroCircleButtonStyle}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="#000000"/>
                <Setter Property="Background" Value="#ededed"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Foreground" Value="#ffffff"/>
                <Setter Property="Background" Value="#009688"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground" Value="#FF808080"/>
            </Trigger>

        </Style.Triggers>
    </Style>
</UserControl.Resources>

设置背景时鼠标悬停效果不起作用,但我需要设置背景。怎么了?

直接设置的依赖项属性值(“本地值”)的优先级高于样式设置器设置的值。有关详细信息,请参阅

那么,背景呢

<Button Background="White" ... />

直接设置的依赖项属性值(“本地值”)的优先级高于样式设置器设置的值。有关详细信息,请参阅

那么,背景呢

<Button Background="White" ... />

如果希望能够将“背景”属性设置为本地值,并在鼠标移动到按钮上时仍对其进行更改,则可以在按钮的ControlTemplate中定义触发器。这实际上意味着您必须复制MetroCircleButtonStyle基本样式,或者将数据触发器直接添加到基本样式中

或者,您可以按照Clemens建议的样式设置前台属性。您可以通过编程方式创建样式,如下所示:

<Button x:Name="button" Content="abcdefg" Style="{DynamicResource Style2}" Width="45" Height="45" VerticalAlignment="Top" BorderThickness="0"  FontSize="18"  FontFamily="/WpfApplication2;component/Resources/#Vazir"/>
Style style = new Style { TargetType = typeof(Button) };
style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.Green));
style.BasedOn = FindResource("MetroCircleButtonStyle") as Style;
button1.Style = style;
    <Style TargetType="Button" x:Key="ButtonStyle">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard TargetProperty="(Foreground).(SolidColorBrush.Color)">
                        <ColorAnimation To="Red" Duration="0:0:0"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

如果希望能够将“背景”属性设置为本地值,并在鼠标移动到按钮上时仍对其进行更改,则可以在按钮的ControlTemplate中定义触发器。这实际上意味着您必须复制MetroCircleButtonStyle基本样式,或者将数据触发器直接添加到基本样式中

或者,您可以按照Clemens建议的样式设置前台属性。您可以通过编程方式创建样式,如下所示:

<Button x:Name="button" Content="abcdefg" Style="{DynamicResource Style2}" Width="45" Height="45" VerticalAlignment="Top" BorderThickness="0"  FontSize="18"  FontFamily="/WpfApplication2;component/Resources/#Vazir"/>
Style style = new Style { TargetType = typeof(Button) };
style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.Green));
style.BasedOn = FindResource("MetroCircleButtonStyle") as Style;
button1.Style = style;
    <Style TargetType="Button" x:Key="ButtonStyle">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard TargetProperty="(Foreground).(SolidColorBrush.Color)">
                        <ColorAnimation To="Red" Duration="0:0:0"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

实际上,您可以使用比“本地值”优先级更高的动画来执行此操作,方法如下:

如下定义您的样式:

<Button x:Name="button" Content="abcdefg" Style="{DynamicResource Style2}" Width="45" Height="45" VerticalAlignment="Top" BorderThickness="0"  FontSize="18"  FontFamily="/WpfApplication2;component/Resources/#Vazir"/>
Style style = new Style { TargetType = typeof(Button) };
style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.Green));
style.BasedOn = FindResource("MetroCircleButtonStyle") as Style;
button1.Style = style;
    <Style TargetType="Button" x:Key="ButtonStyle">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard TargetProperty="(Foreground).(SolidColorBrush.Color)">
                        <ColorAnimation To="Red" Duration="0:0:0"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

然后你可以像这样使用你的按钮

        <Button Content="Button Title 1" Foreground="Green" Style="{StaticResource ButtonStyle}"/>
        <Button Content="Button Title 2" Foreground="Blue" Style="{StaticResource ButtonStyle}"/>


此“技巧”用于标准WPF控件样式和模板中。

实际上,您可以使用优先级高于“本地值”的动画来完成此操作,方法如下:

如下定义您的样式:

<Button x:Name="button" Content="abcdefg" Style="{DynamicResource Style2}" Width="45" Height="45" VerticalAlignment="Top" BorderThickness="0"  FontSize="18"  FontFamily="/WpfApplication2;component/Resources/#Vazir"/>
Style style = new Style { TargetType = typeof(Button) };
style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.Green));
style.BasedOn = FindResource("MetroCircleButtonStyle") as Style;
button1.Style = style;
    <Style TargetType="Button" x:Key="ButtonStyle">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Button.MouseEnter">
                <BeginStoryboard>
                    <Storyboard TargetProperty="(Foreground).(SolidColorBrush.Color)">
                        <ColorAnimation To="Red" Duration="0:0:0"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

然后你可以像这样使用你的按钮

        <Button Content="Button Title 1" Foreground="Green" Style="{StaticResource ButtonStyle}"/>
        <Button Content="Button Title 2" Foreground="Blue" Style="{StaticResource ButtonStyle}"/>


此“技巧”用于标准WPF控件样式和模板。

如何以编程方式更改背景?通过编程方式设置样式。最好不要在触发器中更改背景。我不知道如何在代码隐藏中设置basedOn:Style Style=newstyle{TargetType=typeof(Button)};添加(新的Setter(Control.ForegroundProperty,brush.Green));style.basedOn=?myControl.Style=样式;如何通过编程方式更改背景?通过编程方式设置样式。最好不要在触发器中更改背景。我不知道如何在代码隐藏中设置basedOn:Style Style=newstyle{TargetType=typeof(Button)};添加(新的Setter(Control.ForegroundProperty,brush.Green));style.basedOn=?myControl.Style=样式;我不敢相信他们在本机控件中使用了这样的技巧。不管怎样,谢谢。事实上,它几乎被用在了我不敢相信他们在本机控件中使用了这样的技巧。不管怎样,谢谢。事实上,它几乎已经被广泛使用了