【问题标题】:Can I use CaretIndex of a TextBox as a CommandParameter in a button?我可以在按钮中使用 TextBox 的 CaretIndex 作为 CommandParameter 吗?
【发布时间】:2012-09-30 21:06:31
【问题描述】:

我想要一个按钮来将在列表框中选择的文本插入到文本框中。我正在尝试为此使用命令,我将当前插入符号索引作为命令参数传递,然后命令处理程序将在此索引处插入选定的文本。可能吗?我不知道如何在 xaml 中引用 aTextBox.CaretIndex

【问题讨论】:

标签: wpf mvvm textbox


【解决方案1】:

这个问题和this question类似。

关键是绑定属性 CaretIndex 是没有用的,因为它不是 DependencyProperty,因为您不会收到值更改的通知。具体来说,如果您直接绑定到 CaretIndex 程序将编译,但数据绑定中的 CaretIndex 的值将始终为 0,即使您在文本框中移动光标也是如此。

您可以改为创建一个可以绑定的附加属性,而不是 CaretIndex。 提出了一个解决方案here,其中添加了一个附加属性以绑定 SelectedText 属性,该属性也不是依赖项属性。这个想法是一样的。

【讨论】:

  • 在这种情况下没关系,因为他想使用 CaretIndex 作为绑定的。它可能是一个 CLR。但是如果他想用这个道具作为绑定的目标那就错了
  • 其实你可以将 CaretIndex 设置为绑定源,但是当它的值改变时没有通知。因此,命令参数始终为 0
【解决方案2】:

您可以按名称绑定到TextBox,并将CaretIndex 赋予Path 属性

<TextBox Name="MyTextBox" Text="My Text" />
<Button Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=MyTextBox Path=CaretIndex}"/>

【讨论】:

  • 只是想指出您不能在 {Binding} 中使用双引号,因为它们是无效的。
  • Miklós Balogh - 你不能那样做 - 因为 CaretIndex 不可绑定,它总是会给你 0。
  • 同意。这总是返回零,因为每次您失去对文本框的关注时,它只会将 Caretindex 设置为 0。
猜你喜欢
  • 2011-06-27
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2014-07-05
相关资源
最近更新 更多