2012-12-27 6 views
5

Tôi có một TreeView với XAML WPF hiển thị dưới đây:WPF TreeView phục hồi tập trung sau khi nhấn đúp chuột

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

Nhiệm vụ là để mở một số hình thức sau khi click đúp vào một mục con.

code-behind cho sự kiện 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 

       } 

      } 

} 

Vấn đề: Sau khi cửa sổ mong muốn được mở ra, hình thức với một treeview kích hoạt bản thân, làm cho cửa sổ mới để đi xung quanh. Làm cách nào để cửa sổ mới vẫn hoạt động?

Trả lời

8

Bạn có thể cần để WPF kết thúc công việc xử lý (các) sự kiện nhấp chuột hiện tại trước khi bạn mở Cửa sổ mới. Hãy để cửa sổ mới được công việc UI tiếp theo bằng cách thêm vào hàng đợi dispatcher hiện tại như thế này:

(...) 

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

Tuyệt vời! Những công việc này! –

+0

Giải pháp đơn giản và tốt đẹp. Cảm ơn bạn ! –

-1

trong constructor của hình thức mới thiết

this.Focus(); 

Ngoài ra, không hình thức mới của bạn nên được cửa sổ phương thức? nếu có sử dụng Editor.ShowDialog() thay vì Editor.Show(); Nó sẽ tự động giải quyết vấn đề với tiêu điểm

+0

Dĩ nhiên, phương thức giúp. Nhưng tôi không cần phương thức :) –