簡體   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