【问题标题】:Make FocusManager wait until databinding is complete?让 FocusManager 等到数据绑定完成?
【发布时间】:2016-02-16 20:22:30
【问题描述】:

我正在尝试让 WPF 应用程序将其初始焦点设置为网格内的 TextBoxTextBox 将其 Text 属性数据绑定到可能已经或可能没有文本集的视图控制器。当设置此焦点并且 TextBox 已有文本时,我希望选择该文本,以便您只需键入即可立即对其进行编辑。

我可以通过在WindowLoaded 事件内调用Focus() 来完成此操作,如下所示:

public void HighlightTextOnFocus(object sender, RoutedEventArgs e)
{
    var senderBox = (TextBox)sender;
    senderBox.SelectionStart = 0;
    senderBox.SelectionLength = senderBox.Text.Length;
}

private void EditEntryView_OnLoaded(object sender, RoutedEventArgs e)
{
    TotalHoursBox.Focus();
}

我的问题是如何在不使用代码隐藏的情况下完成相同的事情,而是在 XAML 中完成。我曾尝试使用FocusManager,但它试图在数据绑定完成之前设置焦点,导致我的HighlightTextOnFocus 方法被调用实际设置文本之前,什么也没做。

有没有办法强制FocusManager 等到数据绑定完成?

【问题讨论】:

  • 您是否尝试在刚刚附加到 Loaded 事件的 EventTrigger 中使用它?听起来等价,只需 xaml 即可完成。

标签: c# wpf xaml data-binding


【解决方案1】:

您可以为此使用附加行为模式。它看起来像:

<TextBox Text="{Binding Text}" local:SelectAllTextBoxBehavior.IsEnabled="True" />

SelectAllTextBoxBehavior 代码可用here

或者使用Blend SDK,详情here

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2010-11-07
    • 1970-01-01
    • 2017-03-06
    • 2019-02-03
    相关资源
    最近更新 更多