[編集] *返された例外を含めるのを忘れていました
'System.Windows.Style' is not a valid value for property 'Fill'
*
これは私の最初の投稿です。私はすでに多くの質問を検索しましたが、これはすでに答えられていない可能性があります。私は、MVVM、Prism、および WPF に関してはまったくの初心者であり、この件で深いところに投げ込まれました。
モデルのブール値に応じて 2 つの四角形の内容を変更したい (Binding Passed)。
テストが Pass (bool True) を返した場合、最初の四角形に緑色を表示し、2 番目の四角形に UserControl.Resource Style x:Key="RectanglePass" を表示します。テストが失敗した場合、最初の四角形は赤で、2 番目は UserControl.Resource Style x:Key="RectangleFail" を表示します。
次の xaml コードがあります。
<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>
上記は機能せず、例外を返します。2 番目の Rectangle タグ (rectStatusImg) を次の行に置き換えるとします。
<Rectangle Name="rectStatusImg" Style="{StaticResource RectanglePass}" Width="120" Height="120" Grid.Row="2" ></Rectangle>
xaml が機能し、期待どおりの結果が得られます。しかし、プログラムで変更できるように、それを Boolean Passed にバインドしたいと考えています。
ここで私の問題を説明できたことを本当に願っています。
事前にご協力いただきありがとうございます。このサイトは常に宝物であり、大きな助けになっています。
乾杯、サイモン