0

BackgroundWorkers を介して非同期的に作業を行うアプリ モデルで、いくつかの解析および処理ルーチンを呼び出す単純な UI があります。モデル コードが機能し始めると、Parsing と Processing の 2 つのプロパティが設定されます。UI に 2 つの四角形があり、それらのブール値が設定されているかどうかに応じて色を変更したいと考えています。ウィンドウの DataContext がモデルに設定され、メッセージ リストと UI の他の部分が正常に動作しています。XAML でやりたいことを表現する方法がわかりません。

これが私の長方形コードの例です:

<Rectangle Height="20" Name="ParsingLamp" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" Fill="Gray">
    <Rectangle.Triggers>
        <Trigger Property="{Binding Path=Parsing}" Value="true">
            <Setter TargetName="ParsingLamp" Property="Fill" Value="LightGreen" />
        </Trigger>
        <Trigger Property="{Binding Path=Parsing}" Value="false">
            <Setter TargetName="ParsingLamp" Property="Fill" Value="Brown" />
        </Trigger>
    </Rectangle.Triggers>
</Rectangle>

「Fill member is not valid because it does not have a qualitying type name.」というエラーが表示されます。

おそらく、トリガーは、私が達成しようとしていることを行う正しい方法ではありませんか?

4

1 に答える 1

6

いくつかの問題:

  • ViewModelにバインドしているため、DataTriggerを使用する必要があります。

  • DataTriggersはスタイルである必要があります。

  • ローカル値を設定した場合、たとえば<Rectangle Fill=''/>、これはトリガーによって設定された値をオーバーライドするため、削除する必要があります。

これは機能するはずです:

<Page.Resources>
    <Style x:Key="LampStyle" TargetType="{x:Type Rectangle}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Parsing}" Value="true">
                <Setter Property="Fill" Value="LightGreen" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=Parsing}" Value="false">
                <Setter Property="Fill" Value="Brown" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Page.Resources>

<Grid>
    <Rectangle Height="20" Style="{StaticResource LampStyle}" Stroke="Black" Width="20" RadiusX="4" RadiusY="4" />
</Grid>
于 2012-04-10T16:19:08.380 に答える