0

コンテンツ テンプレートにテキストを含むカスタム コントロールがあります。

<ControlTemplate TargetType="{x:Type local:TouchScreenKey}">    
    <TextBlock><ContentPresenter Content="{TemplateBinding Title, Converter={StaticResource CaseConverter}}" /></TextBlock>
</ControlTemplate>

およびカスタム IValueConverter CaseConverter - プロパティ UpperCase を使用。したがって、コンバーターの UpperCase プロパティを true に設定すると、バインド時にテキストが大文字に変換されます。マークアップで UpperCase を変更すると、すべてうまくいきます。しかし、実行時にプロパティを変更しても、何も起こりません。コンバーターのプロパティを変更しても、コントロールが強制的に再バインドされないためです。コンバーターのプロパティ変更時にコンバーターを使用するコントロールを再バインドするにはどうすればよいですか?

4

2 に答える 2

0

私の知る限り、コンバーターにすべてのターゲットを更新するように指示する方法はありません。コンバーターはターゲットについて何も知りません。これは単なるステートレス関数でありF(x)、1 つの値を取り、別の値を返します。

プロパティを更新するには、WPF に依頼する必要があります。たとえば、プロパティが何らかのソース プロパティにバインドされている場合、INotifyPropertyChangedを実装し、イベントをトリガーできますPropertyChanged。または、バインディング式BindingOperationsを取得するように要求し、手動でUpdateTarget()を呼び出すこともできます。

多分コンバーターはここで最良の選択ではありませんか? 添付プロパティを使用して大文字と小文字を変更することも検討してください。

于 2010-02-26T09:30:17.250 に答える
0

それは誰かを助けるかもしれません-私は解決策を見つけました-マルチバインディングを使用して

<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<ContentPresenter>
    <ContentPresenter.Content>
        <MultiBinding Converter="{StaticResource MultiCaseConverter}">
            <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Title" />
            <Binding ElementName="TouchKeyboard" Path="UpperCase" />
        </MultiBinding>
    </ContentPresenter.Content>
</ContentPresenter>

そして MultiCaseConverter を書きました-これは、最初のパラメーターを2番目のパラメーターに応じて変換します(大文字)

于 2010-02-26T09:39:19.793 に答える