2009-08-21 16 views
4

それぞれのTreeViewItems Selectedイベントが発生したときに新しいウィンドウを起動するTreeViewがあります。親ツリービュー項目ゴースト選択イベント!

<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の背後にあるコード:ウィンドウ {パブリック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) 
    { 

    } 
} 

}

私は予想通り、新しいウィンドウが起動された子ノードをクリックしてください。しかし、後で即座にその親parent Selected eventが新しいウィンドウからフォーカスを盗んだり、親ノードを現在の選択としてマークしたりします。

新しく起動したウィンドウにフォーカスがあり、クリックされたノードがユーザーの選択に灰色に変わることが予想されました。なぜこのようなことが起きるのか、どうやってそれを防ぐことができるのか、誰にも分かりますか?

おかげで、

Brette

答えて

2

思想私は答えを投稿します。私はついにこれを回避する方法を見つけました。 w.Owner = thisを設定します。効果はありません。 TreeViewItemのSelectedイベントで新しいウィンドウを起動すると、いくつかのフォーカスの問題が発生します。私は根本的な原因がディスパッチャーでこれを実行することによって何かを発見していないが、それを修正するようだ。以下を参照

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

希望すると、他の誰かが時間を節約できます。

ブレット

+0

ViewModelのIsSelectedプロパティ設定ツールから起動するときに同じ問題が発生しました。そこからDispatcherを使用することはできないので、私はこのソリューションを使用しています:http://stackoverflow.com/a/5971732/383129 – JoanComasFdz

0

追加:

w.Owner = this  

例:

private void TreeViewItem_Selected(object sender, RoutedEventArgs e) 
{ 
    Window w = new Window(); 
    w.Owner = this; 
    w.Show(); 
    e.Handled = true; 
} 
関連する問題