2016-12-01 1 views
0

私はwpfを初めて使っています。私は解決策を探しています。私の試行された解決策が機能していない理由を説明しています。ResourceDictionaryからusercontrolsへのバインディングスタイル

私の場合です。 私はいくつかのUserControlを持っています。それぞれの場合、私は以下のスタイルを適用します:

<UserControl.Resources> 
    <Style TargetType="TextBox" BasedOn="{StaticResource Centratura}"> 
     <Setter Property="IsEnabled" Value="{Binding Property1.IsAbilitato}" /> 
    </Style> 
</UserControl.Resources> 

リソースディクショナリで定義されたスタイルに基づいています。 それはうまく動作します。 しかし、すべてのUserControlについて、前のコードは、Property1.IsAbilitato、Property2.IsAbilitato、Property3.IsAbilitato ...となるバインディングプロパティを除いて同一であることに注意してください。

これはコードの複製です。好きです。私はどのようにリソース辞書にスタイルを配置し、後で適切なバインディングを各usercontrolに適用するのかと思いました。

私はこの方法では、here提案されたもののようなTagプロパティを使用してみました:

私のユーザーコントロールで:

<UserControl x:Class="whatever" 
    ... 
    Tag="{Binding Property1.IsAbilitato}" 
    ...> 

とのResourceDictionaryで:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style TargetType="TextBox"> 
     <Setter Property="IsEnabled" Value="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" /> 
     <Setter Property="HorizontalContentAlignment" Value="Center" /> 
    </Style> 
</ResourceDictionary> 

それ動作しません。提案?その他のソリューション? (MVVMを使用しています(該当する場合)。 ありがとうございます。

+0

このリソースファイルをapp.xamlに適用しましたか? –

+0

はい、しました。それは他のもののために働く。 – Nikzeno

答えて

1

あなたがテキストボックス自体にタグを追加する必要があります。すべての

<Setter Property="IsEnabled" Value="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" /> 

をしかし、あなたは、ユーザーコントロールに追加したいと望む場合:あなたが仕事に次たい場合

<TextBox Tag="{Binding Property1.IsAbilitato}"/> 

TextBoxを適用するには、次のように変更する必要があります。

<Setter Property="IsEnabled" Value="{Binding Path=Tag, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" /> 
関連する問題