2011-06-21 1 views
0

私はカスタムコントロールValidatingTextBox、以下の依存関係プロパティの中に、宣言している:カスタムコントロール内のDependencyPropertyを通報します私のコードでは

public DependencyProperty visibleText = DependencyProperty.RegisterAttached("visText", typeof(String), typeof(ValidatingTextBox)); 
public String visText 
{ 
    get { return theBox.Text; } 
    set { theBox.Text = value; } 
} 

しかし、私はXAMLを使用しようと

<local:ValidatingTextBox> 
    <ValidatingTextBox.visibleText> 

    </ValidatingTextBox.visibleText> 
</local:ValidatingTextBox> 

それはそのような依存プロパティはValidatingTextBox内に存在しないと言います。私は間違って何をしていますか?私のカスタムコントロールの子テキストボックスと対話する良い方法はありますか?

答えて

1

visTextとして登録した登録方法では、フィールドの名前はプロパティ自体とは関係ありません。また、通常のプロパティのように使用される接続プロパティを定義しているようですが、通常の依存プロパティとして定義する必要があります。

さらに、あなたがこれを行うことにより、CLR-ラッパー、通常のプロパティなしに二つの特性、depedencyプロパティを作成します。それがアクセスしたことがないので、

public String visText 
{ 
    get { return theBox.Text; } 
    set { theBox.Text = value; } 
} 

をそれはあなたの実際のdepedencyプロパティの値とは何の関係もありませんそれ。また、プロパティフィールドは静的で読み取り専用でなければなりません。

Depedency Properties Overviewからの読書は非常に混乱していると言われており、またかなり役に立つはずのthe article on creating custom dependency propertiesもあります。


子コントロールとやりとりする方法に関する質問に対処するには、次のようにします。依存プロパティを作成して(適切な)プロパティにバインドします。プロパティが既に子に存在しているので

あなたもAddOwnerでそれを再利用することができます

public static readonly DependencyProperty TextProperty = 
    TextBox.TextProperty.AddOwner(typeof(MyControl)); 
public string Text 
{ 
    get { return (string)GetValue(TextProperty); } 
    set { SetValue(TextProperty, value); } 
} 
<!-- Assuming a usercontrol rather than a custom control --> 
<!-- If you have a custom control and the child controls are created in code you can do the binding there --> 
<UserControl ... 
     Name="control"> 
    <!-- ... --> 
    <TextBox Text="{Binding Text, ElementName=control}"/> 
    <!-- ... --> 
</UserControl> 
関連する問題