2017-08-10 6 views
0

私はWPFスタイリングに慣れていませんし、次の作業をすることはできません: 私はそれに別のチェックボックスでカスタムチェックボックススタイルを持っています。 ControlTemplateの子の "contolCheckBox"子として変更する親の "IsChecked"値が必要です。 異なるトリガーを試行しましたが、親プロパティに到達できません。制御doesnの `tの変化のWPFスタイルで、子にバインド親チェックボックスプロパティを修正する方法はありますか?

<Style x:Key="CustomCheckBox" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Height" Value="27" /> 
    <Setter Property="Foreground" Value="#FFBABAC7" /> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type CheckBox}"> 
       <Grid> 
        <CheckBox x:Name="contolCheckBox" HorizontalAlignment="Right" VerticalAlignment="Center"/> 
        <ContentPresenter HorizontalAlignment="Left" VerticalAlignment="Center"/> 
       </Grid> 
      </ControlTemplate> 

     </Setter.Value> 
    </Setter> 

    <Setter Property="IsChecked" Value="{Binding IsChecked, ElementName=contolCheckBox}"/> 
    <!----> 
    <Style.Triggers> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter Property="Foreground" Value="#FF29E200"/> 
     </Trigger> 
     <Trigger Property="IsChecked" Value="False"> 
      <Setter Property="Foreground" Value="Firebrick"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

「にisChecked」値: は、今の私は、次のXAMLコードを持っています。 私は何が間違っていますか?

Binding ElementName=contolCheckBox, Path=IsChecked 

も機能しません。

+0

試してみてください。値= "{バインディングモード= TwoWay、ElementName = controlCheckBox、Path = IsChecked}" –

+0

残念ながら、それは助けません。 – Zahar

答えて

0

ControlTemplateで宣言されているので、controlCheckBoxは名前スコープ内にあるとは思いません。あなたのバインディングは機能していません。代わりに、バインドを逆にしてボトムアップからバインドします。このような引用であなたが探しているのはテンプレートバインディングです。

<CheckBox x:Name="contolCheckBox" HorizontalAlignment="Right" VerticalAlignment="Center" 
      IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}" /> 

注結合RelativeSouce ...あなたのControlTemplateでこれを試してみてください。これは、テンプレートの親にバインドしたいことを示しています。これは、基底のControlTemplateコントロールを親プロパティにバインドする一般的な方法です。

+0

ありがとうございました!それは働いた。私はこの方法が親から子へとバインドされ、そうでない場合にはTwoWayモードを忘れてしまったと思ったので、この方法を試しませんでした。 – Zahar

関連する問題