2017-03-10 5 views
0

これは、期待通りに動作するstyleです。私はすべてのコントロールのためにそれを一般化しようとしています。一般的なスタイルのWPF不透明度

問題:ComboBoxタイプをControlに置き換えた場合。もう動作しません。 私はコントロールの種類ごとにスタイルを作成しないようにしようとしています。

<Style TargetType="{x:Type ComboBox}"> 
<Setter Property="IsEnabled" Value="{Binding Path=myProperty}"/> 
<Style.Triggers> 
<Trigger Property="IsEnabled" Value="False"> 
<Setter Property="ComboBox.Opacity" Value="1" /> 
</Trigger> 
</Style.Triggers> 
</Style> 

答えて

1

あなたが望むものを正確に行う方法はないと思います。

<Resources> 
    <Style x:Key="InvisibleWhenDisabled" TargetType="{x:Type Control}"> 
     <Setter Property="IsEnabled" Value="{Binding Path=myProperty}"/> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Opacity" Value="0" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
    <Style TargetType="ComboBox" BasedOn="{StaticResource InvisibleWhenDisabled}"/> 
    <Style TargetType="Button" BasedOn="{StaticResource InvisibleWhenDisabled}"/> 
</Resources> 
+0

を、それは動作しません。これは、あなたがそれはあなたが一度定義したスタイルを継承するBASEDONを使用することにより、重複コードを削減ん各タイプのスタイルを定義する避けることができませんが。 Opacityセッターでは、ControlType.Opacityが指定されています。そうしないと、スタイルは不透明度を変更しません。 – John

+0

@John他に何かが続いているはずです。私の最も単純な例(ComboBoxとコンボを切り替えるボタンをウィンドウで表示)では、不透明度が正しく変更されます。不透明度の値をどのように設定していますか?オリジナルの例では、100%不透明を意味するOpacity = "1"を使用します。 – JHH

関連する問題