Ich versuche, die Farbe eines Rechtecks (WPF) mit Trigger zu setzen, auf einem boolean DependencyProperty abhängig, die ich an der Tag-Eigenschaft des Rechtecks bin verbindlich.Auslöser funktioniert nicht, wenn Bindungseigenschaft dependecyproperty
Ich habe den folgenden Code:
public partial class MainWindow : Window
{
public Boolean isAutoStart
{
get { return (Boolean)GetValue(isAutoStartProperty); }
set { SetValue(isAutoStartProperty, value); }
}
public static readonly DependencyProperty isAutoStartProperty =
DependencyProperty.Register("isAutoStart", typeof(Boolean),
typeof(MainWindow), new PropertyMetadata(true));
private void Window_Loaded(object sender, RoutedEventArgs e)
{
isAutoStart = false;
}
}
und in XAML:
<Window.Resources>
<Style x:Key="TriggerDark" TargetType="Rectangle">
<Setter Property="Fill" Value="Green" />
<Style.Triggers>
<Trigger Property="Tag" Value="False">
<Setter Property="Fill" Value="Red" />
</Trigger>
<Trigger Property="Tag" Value="True">
<Setter Property="Fill" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Rectangle Style="{StaticResource ResourceKey=TriggerDark}" Tag="{Binding Path=isAutoStart, UpdateSourceTrigger=PropertyChanged}">
Wenn ich "True" oder "False" in die Tag-Eigenschaft des Rechtecks codieren, arbeiten die Auslöser richtig . Und wenn ich den Wert der Tag-Eigenschaft auf Laufzeit zur Konsole drucken, funktioniert die Bindung, aber die Auslöser werden nicht ausgelöst.
Irgendwelche Ideen, was ich falsch mache?
Danke!
Die Bindung wird nicht funktionieren, wenn Sie ein Quellobjekt gesetzt, z.B. indem Sie den DataContext des Fensters auf sich selbst setzen oder die RelativeSource-Eigenschaft der Binding angeben. Außerdem macht das Setzen von UpdateSourceTrigger keinen Sinn, da es hier keinen Effekt hat. – Clemens
Es kann auch sinnvoll sein, die Tag-Eigenschaft nicht zu binden und einen Trigger auf ihren Wert festzulegen, sondern stattdessen einen DataTrigger zu verwenden, der direkt an die isAutoStart-Eigenschaft bindet. – Clemens
Falls Sie den DataContext nicht gesetzt haben, versuchen Sie 'Tag =" {Binding isAutoStart, RelativeSource = {RelativeSource AncestorType = Window}} ". – Clemens