双向SelectedText绑定使用继承的文本框
本文关键字:文本 继承 SelectedText 绑定 双向 | 更新日期: 2023-09-27 18:12:10
我试图通过绑定自定义属性'Selected'来用新值替换TextBox的SelectedText。目前,通过绑定更新Selected并不会改变实际的SelectedText。我想我快成功了;至少鼠标选择文本正在更新。
如果可能的话,我更喜欢基于继承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;
}
}
对于Binding更新源代码,如果您想将更改反映回代码,则必须指定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
,并且您不必显式指定它。