繁体   English   中英

使用继承在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而不必显式指定它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM