2011-01-23 14 views
1

私はそのテストコードでカスタムコントロールを持っています。それから私はパネル上にコントロールを置いて、プレビューデザイナーにそれを見てください。次に、xamlでコントロールが定義されている場所に移動し、IsMouseOverと入力し始めますが、このDepは見つかりません。プロパティ、なぜですか?私はSETTTERを提供したくないですが、GETTERでコントロールにバインドするコントロールのユーザーに提供したいと思います。読み取り専用が表示されません。XAMLの依存関係のプロパティ

どうしますか?

// Register the private key to set the value 
private static readonly DependencyPropertyKey IsMouseOverTestPropertyKey = 
       DependencyProperty.RegisterReadOnly("IsMouseOverTest", 
       typeof(bool), typeof(ElementTextBox), 
       new FrameworkPropertyMetadata(false)); 

// Register the public property to get the value 
public static readonly DependencyProperty IsMouseOverTestProperty = 
       IsMouseOverTestPropertyKey.DependencyProperty; 

// .NET Property wrapper 
public bool IsMouseOverTest 
{ 
    get { return (bool)GetValue(IsMouseOverTestProperty); } 
    private set { SetValue(IsMouseOverTestPropertyKey, value); } 
} 

答えて

3

あなたが言っていることは、ユーザーがこのプロパティを設定できるようにしたくないということです。このような:

<ElementTextBox IsMouseOverTest="true" .../> 

そして、私はこのことを理解されるようにあなたは、このプロパティを設定することはできませんので...あなたがインテリセンスで、このプロパティは表示されません取得している正確に何です。

しかし、ユーザーがgetterを使用してプロパティにバインドできるようにしたいとします。このように:

これが問題でない場合は、問題は表示されません。出来るよ。

あなたはこのような何かしたい場合、私は唯一の問題を見ることができます:

<ElementTextBox IsMouseOverTest="{Binding SomeBooleanProperty}" .../> 

そして、そのためにセッターが必要とされているので、これは、動作しませんが。関わらず、論理的にそれが必要、

<ElementTextBox IsMouseOverTest="{Binding SomeBooleanProperty, Mode=OneWayToSource}" .../> 

をしかし、まだそれが動作しません。

あなたはこのように、この結合OneWayToSource使用してモードを設定することをお勧めします。これは既知の制限です。 https://connect.microsoft.com/WPF/feedback/details/523865/read-only-dependency-properties-does-not-support-onewaytosource-bindings?wa=wsignin1.0

+0

使用例:ユーザーがOKボタンを押した後、バインドされたViewModelでSomeBooleanPropertyからバウンド値を取得します。なぜそれはできないのですか? SETTERを私のユーザに提供すると、そこにはいけないものを設定することができます。 – msfanboy

+1

Intellisenseはあなたが期待するものを正確に実行します - プロパティを設定することはできません(プロパティのバインディングの設定もプロパティの設定です)。別のことは、依存関係プロパティを宣言することによって、自動的にそれを設定できることです。ゲッターとセッターは便利のためだけにあります。ユーザーは、この方法で依存関係プロパティを設定できます。MyTextBox.SetValue(MyTextBox.IsMouseOverTestProperty、true) –

+0

私は今、混乱しています...シンプルで短くするために:自分のDPのために宣言されたセッターを持っていると仮定します。このSETTERを使用して設定できるすべての値を削除/消去するにはどうすればよいですか?だから、ユーザーは私の恋人/ロジックを壊さないのですか? – msfanboy

0

ソリューションを再構築しましたか?場合によっては、IDEが以前のバージョンをキャッシュに保持することもあります。

また、コントロールが宣言されているxamlでは、プロパティを設定するだけで済みます。セッターを追加しなかったため、これは不可能です。それを他のコントロール宣言でバインドしてみてください。

関連する問題