[EDIT] ändern * ich die Ausnahme zurückgegebenWie WPF Rechteck Stil Programatically (MVVM) (Noob)
umfassen vergessen hatte'System.Windows.Style' is not a valid value for property 'Fill'
*
Dies ist mein erster Beitrag, ich habe bereits Ich habe viel nach Fragen gesucht, wo dies vielleicht schon erfolglos beantwortet wurde. Ich bin ein kompletter Anfänger, wenn es um MVVM, Prism und WPF geht, und ich bin auf diesem einen Punkt in die Tiefe geworfen worden.
Ich möchte den Inhalt von 2 Rechtecke abhängig von einem Boolean im Modell ändern (Binding Passed).
Wenn ein Test Pass (bool True) zurückgibt, wird die Farbe Grün für das erste Rechteck angezeigt und das zweite Rechteck zeigt den UserControl.Resource Style x: Key = "RectanglePass" an. Wenn Test, dann erste Rechteck nicht rot ist, und die zweite zeigt UserControl.Resource Stil x: Key = "RectangleFail"
ich folgende XAML-Code haben:
<UserControl x:Class="Integration.Memjet.Aoqc.Views.ProcessResultView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="RectangleFail" TargetType="Rectangle">
<Setter Property="Fill">
<Setter.Value>
<VisualBrush>
....
</VisualBrush>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="RectanglePass" TargetType="Rectangle">
<Setter Property="Fill">
<Setter.Value>
<VisualBrush>
....
</VisualBrush>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20">PASS</Label>
<Rectangle Name="rectStatus" Grid.Row="1">
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Passed}" Value="True">
<Setter Property="Fill" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Passed}" Value="False">
<Setter Property="Fill" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
<Rectangle Name="rectStatusImg" Width="120" Height="120" Grid.Row="2" >
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Passed}" Value="True">
<Setter Property="Fill" Value="{StaticResource RectanglePass}" />
</DataTrigger>
<DataTrigger Binding="{Binding Passed}" Value="False">
<Setter Property="Fill" Value="{StaticResource RectangleFail}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
</Grid>
</UserControl>
oben Das funktioniert nicht, und gibt eine Ausnahme zurück. Wenn ich das zweite Rectangle-Tag (rectStatusImg) durch diese Zeile ersetzen sollte;
<Rectangle Name="rectStatusImg" Style="{StaticResource RectanglePass}" Width="120" Height="120" Grid.Row="2" ></Rectangle>
Der XAML funktioniert und produziert das erwartete Ergebnis! Aber ich möchte es an den Boolean Passed binden, damit ich es programmatisch ändern kann.
Ich hoffe wirklich, dass ich mein Problem hier erklären konnte.
Vielen Dank für Ihre Hilfe im Voraus, diese Seite war schon immer ein Schatz und eine große Hilfe.
Cheers, Simon
Legen Sie den DataContext des UserControls überall fest? Es sieht so aus, als wären Dinge richtig eingerichtet, einschließlich der Bindung, aber es ist nicht klar, ob Sie den DataContext tatsächlich so einrichten, dass er das System anzeigt, von dem die Werte tatsächlich kommen. – Tim
Hi @Tim, In der Datei View.xaml.cs hat es eine Eigenschaft fileViewModel, die DataContext als fileViewMode zurückgibt. Das Interessante ist, indem Sie DataContext dem Raster hinzufügen. Es hat aufgehört, eine Ausnahme zu erzeugen. – sayo9394