简体   繁体   中英

Setting some properties on “ismouseover”

we are trying to set some button's properties if the mouse is over the Button. The strange thing is, that it works only for some properties.

We've created an blank WPF application and simply added these lines of code:

<Button Content="{Binding IsMouseOver, RelativeSource={RelativeSource Self},Mode=OneWay}">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
                    <Setter Property="Foreground" Value="Red" />
                    <Setter Property="Background" Value="Yellow" />
                    <Setter Property="BorderThickness" Value="5"></Setter>
                    <Setter Property="BorderBrush" Value="BurlyWood"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="False">
                <Setter Property="Foreground" Value="Green" />
                <Setter Property="Background" Value="BlueViolet" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>            
</Button>

The "false"-Trigger works like a charme. The "True"-Trigger only sets the BorderThickness and the Foreground. Background and Borderbrush will get ignored.

Can anyone tell me how to solve this problem??

This is the default behaviour of a button in order to change define your own template of a button see Control Template

<Button Content="{Binding IsMouseOver, RelativeSource={RelativeSource Self},Mode=OneWay}">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    >                                     
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
                        <Setter Property="Foreground" Value="Red" />
                        <Setter Property="Background" Value="Yellow" />
                        <Setter Property="BorderThickness" Value="5"></Setter>
                        <Setter Property="BorderBrush" Value="BurlyWood"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="False">
                        <Setter Property="Foreground" Value="Green" />
                        <Setter Property="Background" Value="BlueViolet" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM