[英]Two-way SelectedText binding on TextBox using inheritance
我試圖通過綁定自定義屬性“ Selected”來用新值替換TextBox的SelectedText。 當前,通過綁定更新Selected不會更改實際的SelectedText。 我想我快到了; 至少鼠標選擇文本正在更新Selected。
如果可能,我希望基於從TextBox繼承的解決方案。 有人可以告訴我缺少什么嗎?
class SelectionTextbox : TextBox
{
public static readonly DependencyProperty SelectionProperty = DependencyProperty.Register("Selection", typeof(string), typeof(SelectionTextbox));
public string Selection
{
get
{
return (string)base.GetValue(SelectionProperty);
}
set
{
base.SetValue(SelectionProperty, value);
}
}
protected override void OnSelectionChanged(RoutedEventArgs e)
{
base.OnSelectionChanged(e);
Selection = SelectedText;
}
}
問題是,您永遠不會對分配給Selection
的值進行任何操作。 您實際上需要使其成為選定的文本。
public string Selection
{
get
{
return (string)base.GetValue(SelectionProperty);
}
set
{
base.SetValue(SelectionProperty, value);
if(value != SelectedText)
SelectedText = value;
}
}
為了使綁定更新源,如果要將更改反映回代碼,則必須指定Mode=TwoWay
。 這可以通過兩種方式完成:
Selection="{Binding Path=MyProperty, Mode=TwoWay}"
或
public static readonly DependencyProperty SelectionProperty =
DependencyProperty.Register("Selection",
typeof(string),
typeof(SelectionTextbox),
new FrameworkPropertyMetadata(default(string),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
通過使用第二種方法,您可以完成到Selection
所有綁定TwoWay
而不必顯式指定它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.