2012-12-27 10 views
5

Mam TreeView WPF z XAML poniżej:WPF TreeView przywraca jej ostrość po podwójnym kliknięciu

<TreeView x:Name="twElements"> 
      <TreeView.Resources> 
       <v8r:IconTypeConverter x:Key="IconConverter"/> 
      </TreeView.Resources> 

      <TreeView.ItemContainerStyle> 
       <Style TargetType="{x:Type TreeViewItem}"> 
        <EventSetter Event="MouseDoubleClick" Handler="twElements_MouseDoubleClick" /> 
       </Style> 
      </TreeView.ItemContainerStyle> 

      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding ChildItems}"> 
        <StackPanel Orientation="Horizontal"> 
         <Image Source="{Binding Icon, Converter={StaticResource IconConverter}}"/> 
         <TextBlock Text="{Binding Text}" Margin="3,0,0,0"/> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 

zadaniem jest otworzyć jakąś formę po podwójnym kliknięciu na pozycji podrzędnej.

kodu źródłowego dla zdarzenia DoubleClick:

private void twElements_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
     { 
      if (e.Source is TreeViewItem && ((TreeViewItem)e.Source).IsSelected) 
      { 
       e.Handled = true; 

       var twi = (TreeViewItem)e.Source; 

       var Editable = twi.Header as IEditable; 
       if (Editable != null) 
       { 

        Window Editor = Editable.GetEditor(); 
        Editor.Show(); // Editor is a WPF.Window 

       } 

      } 

} 

Problem: Po pożądane okno jest otwarte, postać z katalogów aktywuje się, dzięki czemu nowe okno, aby przejść tło. Jak sprawić, aby nowe okno pozostało aktywne?

Odpowiedz

8

Prawdopodobnie będziesz musiał pozwolić WPF zakończyć zadanie obsługi bieżących zdarzeń kliknięcia myszą przed otwarciem nowego okna. Niech nowe okno być UI pracę obok przez dodanie go do kolejki bieżącego dyspozytora tak:

(...) 

//Editor.Show(); 
Action showAction =() => Editor.Show(); 
this.Dispatcher.BeginInvoke(showAction); 
+0

Doskonale! To działa! –

+0

Ładne i proste rozwiązanie. Dziękuję Ci ! –

-1

w konstruktora nowej formie ustaw

this.Focus(); 

Również twoja nowa forma powinna być modalne okno? jeśli tak, użyj Editor.ShowDialog() zamiast Editor.Show(); Automatycznie rozwiąże problem z ogniskiem

+0

Oczywiście, modalność pomaga. Ale nie potrzebuję modalności :) –

Powiązane problemy