Wie setze ich das MouseOver-Ereignis / den Trigger für den Rahmen in XAML?

72

Ich möchte, dass der Rand grün wird, wenn sich die Maus darüber befindet, und dann wieder blau wird, wenn sich die Maus nicht mehr über dem Rand befindet.

Ich habe es ohne Glück versucht:

<Border 
    Name="ClearButtonBorder" 
    Grid.Column="1" 
    CornerRadius="0,3,3,0" 
    Background="Blue">
    <Border.Triggers>
        <Trigger Property="Border.IsMouseOver" Value="True">
            <Setter Property="Border.Background" Value="Green" />
        </Trigger>
        <Trigger Property="Border.IsMouseOver" Value="False">
            <Setter Property="Border.Background" Value="Blue" />
        </Trigger>
    </Border.Triggers>
    <TextBlock 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Text="X" />
</Border>

Wie kann man einen Trigger oder Ereignisse für MouseOver setzen?

Boris
quelle

Antworten:

142

Ja, das ist verwirrend ...

Laut diesem Blog-Beitrag scheint dies eine Auslassung von WPF zu sein.

Damit es funktioniert, müssen Sie einen Stil verwenden:

    <Border Name="ClearButtonBorder" Grid.Column="1" CornerRadius="0,3,3,0">
        <Border.Style>
            <Style>
                <Setter Property="Border.Background" Value="Blue"/>
                <Style.Triggers>
                    <Trigger Property="Border.IsMouseOver" Value="True">
                        <Setter Property="Border.Background" Value="Green" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" />
    </Border>

Ich denke, dieses Problem ist nicht so häufig, da die meisten Leute dazu neigen, solche Dinge in einen Stil zu zerlegen, sodass es für mehrere Steuerelemente verwendet werden kann.

Grokys
quelle
2
Vielen Dank für Ihre Antwort. Jetzt weiß ich, wie es gemacht wird. Der Grund, warum es so umgesetzt werden muss, bleibt mir jedoch unlogisch. Aber das ist OK, denke ich. :)
Boris
Ja, ich stimme zu, dass es illoigcal ist. Wie gesagt, scheint ein Fehler / eine Auslassung von WPF zu sein.
Grokys
6
Ich bin nicht der Meinung, dass es entweder ein Fehler oder eine Auslassung ist. In WPF gibt es einen expliziten Regelsatz, der die Priorität von Eigenschaftswerten definiert. msdn.microsoft.com/en-us/library/ms743230.aspx
Andrew Shepherd
3
Der Link des Blogposts ist tot
franssu
2
Der Link ist tot, msdn.microsoft.com/en-us/library/ms743230%28v=vs.100%29.aspx jedoch nicht.
PScr