2009-04-27 32 views

答えて

8

このためにControlTemplateは必要ありません。あなたはスタイルだけでこれを達成することができます。次のボタンスタイルがすべてのボタンに適用されます。 IsEnabledがtrueの場合は不透明度を0.5に設定し、トリガー条件がもう適用されない場合は自動的に1に戻します。 ControlTemplateをスタイルで適用する場合は、このトリガーをスタイルに追加できます。また、IsEnabledが継承されてから親が無効になっている場合にも機能します。

<Window.Resources> 
    <Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <Trigger Property="Control.IsEnabled" Value="false"> 
       <Setter Property="Control.Opacity" Value="0.5" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

また、具体的にはControlTemplateソリューションが必要でしたか?

更新

私はあなたのControlTemplateでこれを行うにしたい場合は、論理ツリーに十分に高い次のバインディングステートメントのようなものを使用する必要があるので、TemplateBindingのは、コンバータをサポートしていないと思います。

Opacity={Binding Path=IsEnabled, 
     RelativeSource={RelativeSource TemplatedParent}, 
     Converter={StaticResource BoolToDoubleConverter}} 

ここで、BoolToDoubleConverterは、trueの場合は1、falseの場合は0.5を返すIValueConverterです。あなたがスタイルを使うことができるなら、私はまだスタイルアプローチをお勧めします。もっと簡単に私は信じています。

+0

ありがとうございます。スタイルトリガーと同じように機能します。 – zproxy

関連する問題