2017-05-03 4 views
0

Ich möchte meine Schaltfläche Hintergrund, Rand und Vordergrund ändern, wenn die Maus schwebt, aber es ändert nur den Vordergrund. Bitte helfen ..WPF-Trigger funktioniert nicht

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:coupleofbuttons" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Button x:Name="ButtonX" Margin="10,10,0,0" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" Height="46" Background="Green" BorderThickness="0,0,0,7"> 
      <Button.Style> 
       <Style TargetType="{x:Type Button}"> 
        <Style.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="DarkGoldenrod"/> 
          <Setter Property="Foreground" Value="Green"/> 
          <Setter Property="Margin" Value="10,20,0,0"/> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </Button.Style> 
     </Button> 
    </Grid> 
</Window> 

Antwort

1

Wenn eine Eigenschaft in einem Attribut gesetzt ist, wie Sie mit Margin und Background gemacht haben, dass etwas überschreibt die Art der Fall ist, so eine Art Auslöser kann es nicht ändern.

Legen Sie die Standardwerte für diese Eigenschaften in Setter im Stil fest, aber nicht im Abschnitt Style.Triggers. Und nimm die Margin- und Background-Eigenschaften, die du jetzt hast, ab.

Wie Clemens in einem Kommentar feststellt, wird dieses Verhalten durch die Regeln für Dependency Property Value Precedence erklärt. Es ist besser so: Gewöhnlich möchten Sie, dass Attribute den Stil überschreiben, und nur in diesem Triggerfall möchten Sie, dass der Stil jedes andere Element überschreibt.

<Button 
    x:Name="ButtonX" 
    Content="Button" 
    HorizontalAlignment="Left" 
    VerticalAlignment="Top" 
    Width="100" 
    Height="46" 
    BorderThickness="0,0,0,7" 
    > 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
      <Setter Property="Margin" Value="10,10,0,0" /> 
      <Setter Property="Background" Value="Green" /> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="DarkGoldenrod"/> 
        <Setter Property="Foreground" Value="Green"/> 
        <Setter Property="Margin" Value="10,20,0,0"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 

Vage Off-Topic Ranting

persönlich als Benutzer von Software, finde ich es sehr frustrierend Kontrollen haben zu bewegen, wenn ich sie klicken, das ist die Wirkung Ihrer Trigger haben wird, wenn es Ändert die Marge. Gerade gestern habe ich auf genau diesem Punkt Feedback zu einer Website geschickt. Ich sagte ihnen, dass es amüsant sei, einen wütenden Waschbären mit einem Stock zu stoßen.

Aber als Entwickler ist das Ihr Ruf. Ihr Interface war viel ungeheuerlicher als Ihres, um ehrlich zu sein. Es war voller swirly purple stuff. Ich musste sie fragen, ob Google Analytics verfolgt, wie viele Zuschauer Selbstmord begangen haben. Ich bezweifle, dass sie antworten werden. Kundenservice ist eine verlorene Kunst.

+0

vielen Dank es funktioniert und jetzt verstehe ich "Abhängigkeiten" .. danke ... –

+0

@YassirRabiea Großartig. Wenn das Problem behoben wurde, markieren Sie es als richtige Antwort. –

Verwandte Themen