1

I am new In XAML. I have my styling in Resources File and that style will automatically be applied to All Button in my application. But some scenario has been changed and what I have to do is if any delete button in application exist change mouse hover color to white other button mouse hover color remains same. I tried but mouse hover event change all the button background color but what I want is only Delete Button color should change I need only design side

Before Mouse Hover

after Mouse Hover

My Code is:

<Style x:Key="BaseButtonStyle" TargetType="Button">
        <Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush1}" />
        <Setter Property="BorderBrush" Value="{StaticResource ButtonBorderBrush}" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Padding" Value="3" />
        <Setter Property="Cursor" Value="Hand" />
        <Setter Property="BorderThickness" Value="2">
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}">
                        <ContentPresenter />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <DataTrigger Binding="{Binding  Path=Content, RelativeSource={RelativeSource Self}}" Value="DELETE">
                <Setter Property="Background" Value="#990000"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding  Path=Content, RelativeSource={RelativeSource Self}}" Value="Log out">
                <Setter Property="Background" Value="#990000"></Setter>
            </DataTrigger>

            <DataTrigger Binding="{Binding ElementName=delete,  Path=IsMouseOver}" Value="True">
                <Setter Property="Background" Value="White"/>

                <Setter Property="BorderBrush" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

<Style BasedOn="{StaticResource BaseButtonStyle}" TargetType="Button">
        <Setter Property="FontSize" Value="16"></Setter>
        <Setter Property="FontWeight" Value="Bold"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid>
                         <Border x:Name="BaseShape" CornerRadius="10" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" />
                        <Rectangle x:Name="ButtonHighlight" Margin="1" RadiusX="9" RadiusY="9" Stroke="{StaticResource ButtonHoverHighlightBorderBrush}" StrokeThickness="1" Grid.ColumnSpan="2" Opacity="0" />
                        <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
                        <Rectangle x:Name="FocusedVisualElement" Stroke="{StaticResource ButtonFocusedBorderBrush}" StrokeThickness="1"  RadiusX="10" RadiusY="10" Opacity="0" />
                        <Rectangle x:Name="DisabledVisualElement" Fill="Chartreuse" IsHitTestVisible="false" RadiusX="10" RadiusY="10" Opacity="0" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
<Grid>
    <Button Content="Delete" Name="delete" Width="50" Height="50" HorizontalAlignment="Right" Margin="0,70.121,170.028,0" VerticalAlignment="Top" d:LayoutOverrides="Height"/>
    <Button x:Name="button" Content="Kii" Width="50" Height="50" HorizontalAlignment="Left" Margin="186.349,70.121,0,0" VerticalAlignment="Top" d:LayoutOverrides="Height"/>
    <Button x:Name="button1" Content="ZeKiillo" Width="50" Height="50" HorizontalAlignment="Left" Margin="82.075,70.121,0,0" VerticalAlignment="Top"></Button>
</Grid>
Naresh Ravlani
  • 1,600
  • 13
  • 28

2 Answers2

0

Go like this:

        <Style x:Key="BaseButtonStyle" TargetType="Button">
            <Setter Property="Background" Value="Green" />
            <Setter Property="BorderBrush" Value="Blue" />
            <Setter Property="Foreground" Value="White" />
            <Setter Property="Padding" Value="3" />
            <Setter Property="Cursor" Value="Hand" />
            <Setter Property="BorderThickness" Value="2">
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding  Path=Content, RelativeSource={RelativeSource Self}}" Value="Delete">
                    <Setter Property="Background" Value="#990000"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding  Path=Content, RelativeSource={RelativeSource Self}}" Value="Log out">
                    <Setter Property="Background" Value="#990000"></Setter>
                </DataTrigger>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding
                                   RelativeSource={
                                   RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}},
                                   Path=IsMouseOver}" Value="True"/>
                        <Condition Binding="{Binding Content}" Value="Delete"/>
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Background" Value="White"/>
                    <Setter Property="BorderBrush" Value="Red"/>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>

MultiDataTrigger with RelativeResource solves here

Peter
  • 1,655
  • 22
  • 44
0

You could use a MultiTrigger that checks both the IsMouseOver and the Content property:

<Style x:Key="BaseButtonStyle" TargetType="Button">
    <Setter Property="Background" Value="{StaticResource ButtonBackgroundBrush1}" />
    <Setter Property="BorderBrush" Value="{StaticResource ButtonBorderBrush}" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Padding" Value="3" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="BorderThickness" Value="2">
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <DataTrigger Binding="{Binding  Path=Content, RelativeSource={RelativeSource Self}}" Value="Delete">
            <Setter Property="Background" Value="#990000"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding  Path=Content, RelativeSource={RelativeSource Self}}" Value="Log out">
            <Setter Property="Background" Value="#990000"></Setter>
        </DataTrigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="Content" Value="Delete" />
            </MultiTrigger.Conditions>
            <Setter Property="Background" Value="White"/>
            <Setter Property="BorderBrush" Value="Red"/>
        </MultiTrigger>
    </Style.Triggers>
</Style>

Remember that the values are case-sensitive. "DELETE" is not the same value as "Delete".

mm8
  • 163,881
  • 10
  • 57
  • 88