在按钮悬停时将文本和路径更改为不同颜色

Nee*_*ati 1 wpf button hover

我有一个包含路径和文本的按钮.就像这样

在此输入图像描述

在悬停按钮时,它应该像这样改变颜色 在此输入图像描述

这是我已经完成的Xaml文件

<Button  Grid.Row="1" Grid.Column="0" Style="{StaticResource DashBordMenuButton}" >
            <StackPanel >
                <Path Name="DIcon1" Data="{StaticResource IconReporting}" Fill="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}"  HorizontalAlignment="Center"  ></Path>
                <TextBlock HorizontalAlignment="Center" Margin="0,10,0,0" > DASHBORD</TextBlock>
                <TextBlock  LineHeight="25" TextWrapping="Wrap" LineStackingStrategy="BlockLineHeight" Margin="0,20,0,0" Text="Minir All Servers,Clients and Activies"></TextBlock>
            </StackPanel>
        </Button>
Run Code Online (Sandbox Code Playgroud)

样式

<Style x:Key="DashBordMenuButton" TargetType="Button">

    <Setter Property="Margin" Value="10"></Setter>
    <Setter Property="Background" Value="White"/>
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Name="border" BorderThickness="1,1,1,4" BorderBrush="Gray" Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="#FF36D8E0"/>
                        <Setter Property="Foreground" Value="White"></Setter>
                    </Trigger>

                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>


</Style>
Run Code Online (Sandbox Code Playgroud)

在悬停它的工作正常我想要的.但默认路径图标也变成黑色而不是白色.我可以提前解决这个问题

Abi*_*hew 6

您的路径Forground通过XAML下方的按钮颜色填充

 Fill="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}"
Run Code Online (Sandbox Code Playgroud)

所以,在你的style触发器,HoverForground你的Button是默认的黑色.你可以在触发器开始之前添加一个setter来改变它.添加setterForground您的Button象下面这样.

<Style x:Key="DashBordMenuButton" TargetType="Button">
 <Setter Property="Margin" Value="10"></Setter>
            <Setter Property="Background" Value="White"/>
            <Setter Property="OverridesDefaultStyle" Value="True" />
            <Setter Property="Cursor" Value="Hand" />
            <Setter Property="Foreground" Value="#FF36D8E0"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">

                        <Border Name="border" BorderThickness="1,1,1,4" BorderBrush="Gray" Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="#FF36D8E0"/>
                                <Setter Property="Foreground" Value="White"></Setter>
                            </Trigger>

                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
      </Style>
Run Code Online (Sandbox Code Playgroud)

增加了一个setterstyle

 <Setter Property="Foreground" Value="#FF36D8E0"></Setter>
Run Code Online (Sandbox Code Playgroud)