TemplateBinding von einem Stil DataTrigger In ControlTemplate
In den folgenden XAML-ich bin mit einem Rechteck mit einer Grenze als Vorlage für ein Umschaltfeld.
Ich will die BorderBrush eine andere Farbe, um die sich wandelnden Wert von ToggleButton.IsChecked.
Leider ist mein Versuch, hier mit einem TemplateBinding in der DataTrigger nicht funktioniert. Was muss ich stattdessen tun?
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<ControlTemplate x:Key="ButtonAsSwatchTemplate">
<Border BorderThickness="1">
<Border.Style>
<Style>
<Setter Property="BorderBrush" Value="Gainsboro" />
<Style.Triggers>
<!-- TemplateBinding doesn't work.-->
<DataTrigger
Binding={TemplateBinding Property=IsChecked}
Value="True">
<Setter Property="BorderBrush" Value="Black" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Rectangle Fill="{TemplateBinding Property=Background}"
Width="15" Height="15" />
</Border>
</ControlTemplate>
</StackPanel.Resources>
<ToggleButton Template="{StaticResource ButtonAsSwatchTemplate}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="2" Background="Red" />
</StackPanel>
BEARBEITEN
Wenn ich Baue, und laden Sie den designer bekomme ich die folgende Fehlermeldung:
Fehler 1 Immobilie "Verbindlich" nicht unterstützen, Werte des Typs 'TemplateBindingExpression'.
LÖSUNG
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<ControlTemplate x:Key="ButtonAsSwatchTemplate">
<Border x:Name="SwatchBorder" BorderThickness="1">
<Rectangle Fill="{TemplateBinding Property=Background}" Width="15" Height="15" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ToggleButton.IsChecked" Value="True">
<Setter TargetName="SwatchBorder" Property="BorderBrush" Value="Yellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</StackPanel.Resources>
<RadioButton Template="{StaticResource ButtonAsSwatchTemplate}"
GroupName="CropGuidesColourRadioButtonGroup"
IsChecked="{Binding Checked}" Margin="2" Background="Red" />
<RadioButton Template="{StaticResource ButtonAsSwatchTemplate}"
GroupName="CropGuidesColourRadioButtonGroup"
IsChecked="{Binding Checked}" Margin="2" Background="Black" />
...
</StackPanel>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie einen Trigger in der ControlTemplate, z.B.
Ein problem, das ich sofort sehen wird, dass Sie BorderBrush als eine lokale Eigenschaft Wert an der Grenze. Diese haben immer Vorrang vor dem Wert des style. Versuchen Sie, die explizite BorderBrush-Attribut und sehen, ob das funktioniert.
Grenze
BorderBrush="Gainsboro"BorderThickness="1"Abhängigkeit Vererbung Von Eigenschaftswerten