2009-08-21 11 views
4

Ich habe eine TreeView, die ein neues Fenster startet, wenn jedes TreeViewItems Selected-Ereignis ausgelöst wird.Übergeordnetes TreeView Item Ghost ausgewähltes Ereignis!

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

Code hinter

namespace WpfApplication1 

{ public partial class Window1: Fenster { 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) 
    { 

    } 
} 

}

Wenn ich auf dem untergeordneten Knoten klicken Sie das neue Fenster wie erwartet gestartet wird. Unmittelbar danach aber werden die Eltern Selected evenis den Fokus aus dem neuen Fenster entfernen und den Elternknoten als aktuelle Auswahl markieren!

Meine Erwartung war, dass das neu gestartete Fenster den Fokus haben würde, und der Knoten, auf den geklickt wurde, würde grau werden und den Benutzern die Auswahl anzeigen. Hat jemand eine Vorstellung davon, warum das passiert und wie ich es verhindern kann?

Danke, Brette

Antwort

2

dachte, ich würde die Antwort schreiben. Ich habe endlich einen Weg gefunden. Einstellung w.Owner = dies; hat keine Wirkung. Das Starten eines neuen Fensters für das Selected-Ereignis eines TreeViewItems führt zu einigen Fokusproblemen. Ich habe nicht herausgefunden, was die Ursache ist, indem Sie dies auf dem Dispatcher ausführen, scheint es zu korrigieren. Siehe unten

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

Hoffe das spart jemand anderes einige Zeit.

Brette

+0

Ich habe das gleiche Problem beim Starten von der IsSelected-Eigenschaft Setter des ViewModels gefunden. Von dort können Sie den Dispatcher nicht verwenden, daher verwende ich diese Lösung: http://StackOverflow.com/a/5971732/383129 – JoanComasFdz

0

Anzahl:

w.Owner = this  

Beispiel:

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