1

ブール値に応じてテキストを変更するハイパーリンクを作成しようとしています。CheckBoxのIsCheckedメソッドを活用できると思いました。そこで、チェックボックス用にこのControlTemplateを作成しました。

 <CheckBox Checked="CheckBox_Checked" IsChecked="{Binding Path=SomeBool, Mode=TwoWay}">
     <CheckBox.Template>
         <ControlTemplate TargetType="{x:Type CheckBox}">
             <BulletDecorator>
                <BulletDecorator.Bullet>
                    <TextBlock>
                        <Hyperlink>
                        <TextBlock x:Name="TextBoxHyperlink">Unchecked</TextBlock>
                        </Hyperlink>
                    </TextBlock>
                </BulletDecorator.Bullet>
                <ContentPresenter />
                </BulletDecorator>
                <ControlTemplate.Triggers>
                   <Trigger Property="IsChecked" Value="True">
                       <Setter TargetName="TextBoxHyperlink" 
                               Property="Text" 
                               Value="Checked" />
                   </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
        </CheckBox.Template>
    </CheckBox>

しかし、ハイパーリンクをクリックしても何も起こりません。チェックされたステータスは変更されず、TextBlockのTextプロパティは更新されません。何か案は?

4

1 に答える 1

5

TextBlock要素にコンテンツとしてテキストを追加することにより、Textプロパティにローカル値を設定します。ローカル値はトリガーによって設定された値をオーバーライドするため、トリガーは効果がありません。このStackOverflowの質問またはmsdnの 依存関係プロパティ値の優先順位を参照してください。

コンテンツとして追加する代わりにTextプロパティを設定すると、親テンプレートプロパティセットと見なされ、親テンプレートトリガーよりも優先順位が低くなります。

<TextBlock x:Name="TextBoxHyperlink" Text="Unchecked"/>

また、ブール値プロパティに基づくトリガーが必要なため、CheckBoxのみを使用しているように聞こえます。Triggerの代わりにDataTriggerを使用して、コントロールのプロパティの代わりにDataContextのプロパティにバインドするか、TextプロパティをSomeBoolに直接バインドして、trueとfalseを「チェック済み」に変換する値コンバーターを使用することができます。および「チェックなし」。

于 2010-06-14T00:50:18.567 に答える