7

以下に示す 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

                }

            }

}

問題: 目的のウィンドウが開いた後、ツリービューを含むフォームがアクティブになり、新しいウィンドウがバックグラウンドになります。新しいウィンドウをアクティブなままにする方法は?

4

2 に答える 2

10

新しいウィンドウを開く前に、WPF に現在のマウス クリック イベントの処理を完了させる必要があるでしょう。次のように現在の Dispatcher のキューに新しいウィンドウを追加して、新しいウィンドウを次のUI ジョブにします。

(...)

//Editor.Show();
Action showAction = () => Editor.Show();
this.Dispatcher.BeginInvoke(showAction);
于 2012-12-28T23:55:34.650 に答える
-1

新しいフォーム セットのコンストラクタで

this.Focus();

また、新しいフォームはモーダル ウィンドウにする必要がありますか? はいの場合はEditor.ShowDialog()代わりに使用Editor.Show();して、フォーカスの問題を自動的に解決します

于 2012-12-27T14:27:16.567 に答える