[英]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.