使用继承在 TextBox 上进行双向 SelectedText 绑定
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
,并且您不必明确指定它。
我试图通过绑定自定义 属性 '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
,并且您不必明确指定它。