【问题标题】:Two-way SelectedText binding on TextBox using inheritance使用继承的 TextBox 上的双向 SelectedText 绑定
【发布时间】:2015-12-07 14:49:32
【问题描述】:

我正在尝试通过绑定自定义属性“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;
    }
}

【问题讨论】:

    标签: c# wpf data-binding textbox selectedtext


    【解决方案1】:

    如果您想将更改反映回代码,您必须指定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,您不必明确指定它。

    【讨论】:

      【解决方案2】:

      问题是,您实际上从未对分配给Selection 的值做任何事情。您需要将其设为实际选定的文本。

      public string Selection
      {
          get
          {
              return (string)base.GetValue(SelectionProperty);
          }
          set
          {
              base.SetValue(SelectionProperty, value);
              if(value != SelectedText)
                  SelectedText = value;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-20
        • 2011-01-15
        • 1970-01-01
        • 2014-10-21
        • 1970-01-01
        • 2015-05-21
        • 2022-12-17
        • 1970-01-01
        • 2012-08-12
        相关资源
        最近更新 更多