2016-12-19 13 views
0

少しの洞察力を探してください。bulletdecorator WPF内のチェックボックスをオフにします

実際のボックスをテキストのサイズと位置に合わせる必要があるため、私はスタイルに設定したチェックボックスを持っています。スタイルのコードは次のとおりです。

Style TargetType="{x:Type CheckBox}" x:Key="recogCheckbox"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type CheckBox}"> 
       <StackPanel Orientation="Horizontal"> 
        <CheckBox Margin="130,4,0,0"/> 
        <BulletDecorator Name="customBullet" Margin="2,0,0,0" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"> 
        <TextBlock Width="100" TextWrapping="Wrap" HorizontalAlignment="Left" Foreground="White" Margin="5,0,0,0" Text="Recognition Call"/> 
        </BulletDecorator> 
        <ContentPresenter/> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>  

チェックボックスのためのXAMLコードはこれです:私はそれは、チェックボックスのチェックを外しているように、自分のアプリケーションにクリアボタンを使用しようとしているが、時にしています

<CheckBox FontFamily="Microsoft Sans Serif" FontSize="12" FontWeight="Bold" Height="20" HorizontalAlignment="Left" HorizontalContentAlignment="Center" Margin="717,193,0,0" 
       Name="recognitionCheckBox" Style="{StaticResource recogCheckbox}" VerticalAlignment="Top" Width="384" > 
</CheckBox> 

I recognitionCheckBox.isChecked = falseを使ってチェックボックスの名前 'recognitionCheckBox'を参照すると、実際のボックスがC#コードの背後で参照するのに困っているスタイルの中にあるので、私が思うのはチェックボックスをオフにしません。

スタイル内のチェックボックスをオフにする方法を知っている人はいませんか。私はいくつかのサイトを検索していますが、まだ私を助けてくれたものは見つかりませんでした。ここから撮影

答えて

0

バインドした後、あなたのコントロールテンプレート内のControlTemplate内側のCheckBoxのにisCheckedプロパティを次のように追加します:

<Style TargetType="{x:Type CheckBox}" x:Key="recogCheckbox"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type CheckBox}"> 
       <StackPanel Orientation="Horizontal"> 
        <CheckBox IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" Margin="130,4,0,0"/> 
        <BulletDecorator Name="customBullet" Margin="2,0,0,0" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"> 
         <TextBlock Width="100" TextWrapping="Wrap" HorizontalAlignment="Left" Foreground="White" Margin="5,0,0,0" Text="Recognition Call"/> 
        </BulletDecorator> 
        <ContentPresenter/> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

次に、CheckboxコントロールのIsCheckedプロパティの現在の値が反映されます。

+0

私はあなたが示唆したように縛りを入れようとしました。テンプレートバインディングの代わりに手作業のバインディングを試みたにもかかわらず、チェックボックスをクリアすることができませんでした。多分もっと説明しなければならないかもしれない。私が作成しているフォーム上の誰かがチェックボックスをチェックして、フォームボタンをクリアすることを決めたら、チェックボックスからチェックを外す必要がありますが、機能しません。 –

+0

バインディングのモードをTwoWayに変更しても問題ありません。私は私の答えを編集しました。 – mm8

+0

今日は仕事に戻り、試してみると完璧に動作します。将来の使用のためにこれを覚えておく必要があります。どうもありがとうございました。承認された回答としてマークされます。 –

0

https://msdn.microsoft.com/en-us/library/ms752319(v=vs.85).aspx CheckBoxコントロール{TemplateBindingのを}使用して自身のにisCheckedプロパティにStackPanelの

<ControlTemplate.Triggers> 
      <Trigger Property="IsChecked" Value="false"> 
      <Setter TargetName="CheckMark" Property="Visibility" Value="Collapsed"/> 
      </Trigger> 
      <Trigger Property="IsChecked" Value="true"> 
      <Setter TargetName="CheckMark" Property="Visibility" Value="Visible" /> 

     </ControlTemplate.Triggers> 
+0

私はこの記事を見て、特定の要素の可視性にのみ影響を与えているので、これをコードから削除してしまいました。私はスタイル内のチェックボックスの要素を参照し、isChecked要素をfalseに設定するためにC#コードを使用しようとしています。 –

関連する問題