【问题标题】:Parent TreeView Item ghost selected event!父 TreeView 项目幽灵选定事件!
【发布时间】:2009-08-21 20:43:39
【问题描述】:

我有一个 TreeView,当它的每个 TreeViewItems Selected 事件被引发时,它会启动一个新窗口。

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1"
    Height="300"
    Width="300">
<Grid>
    <TreeView  Name="treeView1">
        <TreeViewItem Header="Root">
            <TreeViewItem Header="Parent" Selected="ParentTreeViewItem_Selected">
                <TreeViewItem Header="Child" Selected="TreeViewItem_Selected" ></TreeViewItem>
            </TreeViewItem>
        </TreeViewItem>
    </TreeView>
</Grid>
</Window>

代码背后

namespace WpfApplication1

{ 公共部分类 Window1:窗口 { 公共窗口1() { 初始化组件(); }

    private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
    {
        Window w = new Window();
        w.Show();
        e.Handled = true;
    }

    private void ParentTreeViewItem_Selected(object sender, RoutedEventArgs e)
    {

    }
}

}

当我单击子节点时,新窗口按预期启动。然而,紧接着它的父节点 Selected 事件被触发,从新窗口中窃取焦点,并将父节点标记为当前选择!

我的期望是新启动的窗口会有焦点,被点击的节点会变成灰色,向用户表明他/她的选择。有谁知道为什么会发生这种情况以及如何防止它?

谢谢, 布雷特

【问题讨论】:

    标签: wpf wpf-controls


    【解决方案1】:

    我想我会发布答案。我终于找到了解决这个问题的方法。设置 w.Owner = this;没有效果。结果是在 TreeViewItem 的 Selected 事件上启动新窗口会导致一些焦点问题。通过在 Dispatcher 上执行此操作,我还没有找出根本原因是什么,似乎可以纠正它。见下文

        private void ChildTreeViewItem_Selected(object sender, RoutedEventArgs e)
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => new Window().Show()));
        }
    

    希望这可以节省其他人一些时间。

    布雷特

    【讨论】:

    • 我从 ViewModel 的 IsSelected 属性设置器启动它时发现了同样的问题。从那里,你不能使用 Dispatcher,所以我使用这个解决方案:stackoverflow.com/a/5971732/383129
    【解决方案2】:

    添加:

    w.Owner = this      
    

    例子:

    private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
    {
        Window w = new Window();
        w.Owner = this;
        w.Show();
        e.Handled = true;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多