WPF TreeView双击后即可恢复焦点 [英] WPF TreeView restores its focus after double click

查看:50
本文介绍了WPF TreeView双击后即可恢复焦点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有XAML的WPF TreeView,如下所示:

I have a WPF TreeView with XAML shown below:

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

任务是双击子项后打开某些表单.

The task is to open some form after double click on a child item.

DoubleClick事件的代码背后:

code-behind for DoubleClick event:

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

                }

            }

}

问题:打开所需的窗口后,具有树形视图的窗体会自行激活,从而使新窗口成为背景.如何使新窗口保持活动状态?

The problem: After desired window is opened, form with a treeview activates itself, making new window to go background. How to make new window to remain active?

推荐答案

在打开新窗口之前,您可能需要让WPF完成处理当前鼠标单击事件的工作.通过将新窗口添加到当前Dispatcher的队列中,使新窗口成为 next UI作业:

You probably need to let WPF finish the job of handling the current mouse click event(s) before you open the new Window. Let the new window be the next UI job by adding it to the current Dispatcher's queue like this:

(...)

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

这篇关于WPF TreeView双击后即可恢复焦点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆