wpf – 父TreeView项目鬼选事件!

我有一个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

{
      public partial class Window1:Window
    {
        public Window1()
        {
            的InitializeComponent();
        }

    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)
    {

    }
}

}

当我单击子节点时,将按预期启动新窗口.然而imediatly afterwords其父母选择eventis从新窗口发射窃取焦点,并将父节点标记为当前选择!

我的期望是新启动的窗口将具有焦点,并且被点击的节点将变为灰色,指示用户他/她的选择.有谁知道为什么会发生这种情况以及如何防止这种情况发生?

谢谢,
Brette

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

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

希望这能节省一些时间.

Brette

点赞