2

ビューモデルのブールプロパティにバインドされたContentプロパティを持つボタンコントロールがあります。このボタンは、非同期WCF呼び出しを介して実行される、産業用機械のバルブを開閉するために使用されます。サービスが戻ると、ブール値プロパティが更新され、ボタンの視覚的状態への変更がトリガーされます。これはボタンxamlです:

<Button Command="{Binding Path=OpenCloseValveCommand}"
        Content="{Binding Path=ValveIsOpen}"
        Style="{StaticResource ResourceKey=OnOffButtonStyle}">

ボタンは、バルブが開いているときは緑色で、バルブが閉じているときは十字が付いた赤色である必要があります。これはスタイルxamlです:

<Style TargetType="Button" x:Key="OnOffButtonStyle" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Canvas>
                    <Rectangle x:Name="_rect" Fill="Red" Stroke="Black" Width="30" Height="30"></Rectangle>
                    <Path x:Name="_path" Data="M0,0 L30,30 M0,30 L30,0" StrokeThickness="1" Stroke="Black" />
                </Canvas>
                <ControlTemplate.Triggers>
                    <Trigger Property="Content" Value="true">
                        <Setter TargetName="_rect" Property="Fill" Value="Lime" />
                        <Setter TargetName="_path" Property="Visibility" Value="Hidden" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

残念ながら、トリガーは起動しないようです。ボタンのコンテンツがブール型にバインドされていることに関係していると思います。トリガー値として「true」以外のものを使用する必要がありますか?(viewmodelプロパティを整数に変更し、0または1を使用し、トリガー値を「1」にすると、トリガーが機能します)。

前もって感謝します

アンディ

4

2 に答える 2

13

タイプを明示的に指定できます。

<Window ...
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        ...>

<Trigger Property="Content">
    <Trigger.Value>
        <sys:Boolean>True</sys:Boolean>
    </Trigger.Value>
    <Setter TargetName="_rect" Property="Fill" Value="Lime" />
    <Setter TargetName="_path" Property="Visibility" Value="Hidden" />
</Trigger>
于 2012-04-17T11:50:48.563 に答える
0

そのためにを使用しDataTriggerてください:

<Button Command="{Binding Path=OpenCloseValveCommand}"
        Style="{StaticResource ResourceKey=OnOffButtonStyle}">

<Style TargetType="Button" x:Key="OnOffButtonStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Canvas>
                    <Rectangle x:Name="_rect" Fill="Red" Stroke="Black" Width="30" Height="30"></Rectangle>
                    <Path x:Name="_path" Data="M0,0 L30,30 M0,30 L30,0" StrokeThickness="1" Stroke="Black" />
                </Canvas>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding="{Binding ValveIsOpen}" Value="True">
                        <Setter TargetName="_rect" Property="Fill" Value="Lime" />
                        <Setter TargetName="_path" Property="Visibility" Value="Hidden" />
                    </DataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2012-04-17T11:46:06.357 に答える