0
<TextBlock Visibility="{Binding IsTrue1, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Visibility="{Binding IsTrue2, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<TextBlock Visibility="{Binding IsTrue3, Converter={StaticResource BooleanToVisibilityConverter}}"/>

「Converter」プロパティは TextBlock ではなく Binding にあるため、TextBlock でスタイルを使用できません。

各バインディングは異なるため、単一のバインディング リソースを作成することはできません。

では、同じコンバーターを 3 回設定しないようにするにはどうすればよいでしょうか。

EDIT:もう少し説明しようと思います。私が探しているのは、バインディング オブジェクトに既定のコンバーターを与える方法です。これにより、同じコンバーターで多くのバインディングを作成するときに、同じコンバーターを何度も設定する必要がなくなります。

したがって、次のように sth を書くことができれば:

<Grid DefaultBindingConverter="{StaticResource BooleanToVisibilityConverter}">
    <TextBlock Visibility="{Binding IsTrue1}"/>
    <TextBlock Visibility="{Binding IsTrue2}"/>
    <TextBlock Visibility="{Binding IsTrue3}"/>
    ...

私の考えを説明するためだけに、明らかにこれは正しくありません。

今回はそれを十分に明確に説明したことを願っています。

4

1 に答える 1

0

あなたの質問の 2 つの問題について触れましょう。

1. 単一リソース

StaticResourceConverter での定義について誤解されているようです。BooleanToVisibilityたとえば、あなたがコーディングした は、3 回コピーされたオブジェクトではなく機能します。宣言は 1 回だけで、3 回使用されました。

以下のようにコーディングする場合、別の例を見てみましょう

int i;
i=1;
i=2;
i=3;

あなたはi一度宣言し、それを3回使用しました。同様に、StaticResource使用したものも同様の作品です。x:Key="BooleanToVisibility"in<UserControl.Resources>または<Application.Resources>タグを宣言することができます。それだけです。

2. スタイルの使い方

TextBlock に Style を設定する場合は、以下のアプローチを使用できます。

<TextBlock Visibility="{Binding Number1, Converter={StaticResource BooleanToVisibilityConverter}}">
    <TextBlock.Style>
        <Style>
            <!-- Define your Styles here -->                
        </Style>
    </TextBlock.Style>
<TextBlock>

Style上記のように、 XAML 属性を内部タグに展開できます。

==編集==

私は今あなたの意図を理解しています。おそらく、DataContext が機能するように、Converter を階層的な継承方法で適用する必要があります。

残念ながら、私の知る限り、XAML ではそれは不可能です。各 Binding は単なるプロパティであるため、1 つずつ適用する必要があります。

考えられる回避策は、コード ビハインドを使用して要素を列挙し、適用することです。

for(int i=0;i<3;i++){
    var textbox = (TextBox)this.FindName("TextBox" + i);
    var binding = new Binding("IsTrue" + i);
    binding.Converter = new YourDefaultConverter();
    textbox.SetBinding(TextBox.TextProperty, binding);
}

これがあなたの家事を減らすのに役立つことを願っています。

于 2013-02-02T15:06:00.177 に答える