gpt4 book ai didi

c# - WPF TreeView 双击后恢复焦点

转载 作者:太空狗 更新时间:2023-10-29 21:23:21 26 4
gpt4 key购买 nike

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

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

任务是在双击子项后打开一些表单。

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

}

}

}

问题:打开所需窗口后,带有 TreeView 的表单会自行激活,使新窗口成为背景。如何让新窗口保持事件状态?

最佳答案

在打开新窗口之前,您可能需要让 WPF 完成处理当前鼠标单击事件的工作。让新窗口成为下一个 UI 作业,方法是将它添加到当前 Dispatcher 的队列中,如下所示:

(...)

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

关于c# - WPF TreeView 双击后恢复焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14055794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com