2009-06-30 10 views
0

私のポイントはこれです。ユーザチェックCHK1CHK2要素は、偽にでIsEnabledプロパティを変更が、私はCHK2要素への参照を行うことができないとき。テストのために私が必要スタイル内のWPFツリー内の他の要素を呼び出す

これはスタイルXAMLです。

<Style x:Key="styleCheckBox" TargetType="{x:Type CheckBox}"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 

      </Style.Triggers> 
</Style 

スタイルへのコール...

<StackPanel> 
     <CheckBox x:Name="chk1" Content="CheckBox1" Style="{StaticResource styleCheckBox}"/> 
     <CheckBox x:Name="chk2" Content="CheckBox2"/> 
    </StackPanel> 

答えて

3

あなたはスタイルのトリガーにTargetPropertyを設定することはできません。これは、基本的に、StackPanelから派生したカスタムコントロールを作成し、2つのチェックボックスを含むチェックボックスをプロパティとして公開する必要があることを意味します。次に、コントロール(CheckBoxではなく)のスタイルを定義し、必要なプロパティを設定することができます。

もっと簡単な方法(唯一のテストのために必要な場合には)、このようになります:

次のようにInverseBoolConverterが定義されている
<StackPanel> 
<StackPanel.Resources> 
    <local:InverseBoolConverter x:Key="InverseBoolConverter"/> 
</StackPanel.Resources> 
<CheckBox x:Name="chk1" Content="CheckBox1"/> 
<CheckBox x:Name="chk2" Content="CheckBox2" IsEnabled="{Binding ElementName=chk1, Path=IsChecked, Converter={StaticResource InverseBoolConverter}}"/> 
</StackPanel> 

[ValueConversion(typeof(bool), typeof(bool))] 
public class InverseBoolConverter: IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     if(value is bool) 
      return !(bool)value; 
     else 
      return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
     if(value is bool) 
      return !(bool)value; 
     else 
      return null; 
    } 
} 
+0

感謝を!!、非常に便利。 – Rangel

関連する問題