【问题标题】:In WPF, when selecting a TreeViewItem, how do I Focus on another control but still complete my TreeViewItem selection?在WPF中,选择TreeViewItem时,如何专注于另一个控件,但仍然完成我的TreeViewItem选择?
【发布时间】:2009-07-20 09:56:37
【问题描述】:

这听起来像是一个棘手的问题...让我详细说明...

我有一个树视图。当单击/选择一个 treeViewItem 时,我希望另一个 TextBox 成为焦点。

问题是,一旦我将代码添加到文本框的焦点,TreeView 似乎不再显示其选定的节点(即 treeItem 根本没有选择(或至少不可见))。

这是我的事件处理代码...

    private void trvTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        grpEditTreeItem.DataContext = (TreeItemDefinition)e.NewValue;


        txtToken.SelectAll();
        txtToken.Focus();
    }

有什么想法吗?

【问题讨论】:

  • 请提供更多细节...

标签: wpf treeview


【解决方案1】:

区分选定和重点。任何时候都不能有超过 1 个控件。

你想要的是你的 TreeView 在失去焦点时显示它的选定节点。

编辑:
但我可以确认问题,将焦点设置为 SelectedItemChanged() 内的另一个控件将取消选择。

所以你需要的是推迟 Focus() 调用。一个粗略(但不理想)的解决方案是将 txtToken.Focus() 放在 trvTree_MouseUp() 事件处理程序中。但这也会在扩展节点时带走焦点。

因此,您可能必须使用从 SelectedItemChanged() 触发的一次性计时器。

【讨论】:

  • 您还可以在调度程序上排队焦点调用。这些天我几乎将其用作默认设置,因为这样它不会干扰当前的执行框架,而且在给定情况下,它似乎有 90% 的时间会执行您想要的操作
【解决方案2】:
this.Dispatcher.BeginInvoke((Action)delegate
{
    txtToken.SelectAll();
    txtToken.Focus();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多