12

私はそれにバインドされたリストを持つツリービューにツリービューアイテムを持っています:

        <TreeViewItem Name="tviOffline" Foreground="Red" FontWeight="Bold"
                      Header="Offline">
            <TreeViewItem.ItemTemplate>
                <DataTemplate DataType="{x:Type local:Buddy}">
                    <StackPanel>
                        <TextBlock Text="{Binding Nick}" FontSize="10" Foreground="#8CFFD528" />
                    </StackPanel>
                </DataTemplate>
            </TreeViewItem.ItemTemplate>
        </TreeViewItem>

その子のそれぞれにダブルクリックイベントを持たせる方法がわかりません。

どんな助けでも大歓迎です。どうもありがとう。

4

3 に答える 3

28
<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...
于 2010-11-28T08:01:55.070 に答える
17
<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...

次に、連続する親 TreeViewItem でダブルクリックが発生するのを防ぐために、ハンドラーを次のように記述する必要があります。

   private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args)
    {
        if (sender is TreeViewItem)
        {
            if (!((TreeViewItem)sender).IsSelected)
            {
                return;
            }
        }

        .... do stuff.

    }

Aurelien Ribon が 90% の作業を完了してくれたことに感謝します。ダブルクリックの問題は、Stack Exchange の他の投稿でよく知られているようです。両方のソリューションを 1 つの答えに統合するだけです。

于 2014-02-02T21:53:17.150 に答える
4

これは、すべてのケースで機能させることができた唯一の方法です。

    void MyTreeView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var clickedItem = TryGetClickedItem(myTreeView, e);
        if (clickedItem == null)
            return;

        e.Handled = true; // to cancel expanded/collapsed toggle
        DoStuff(clickedItem);
    }

    TreeViewItem TryGetClickedItem(TreeView treeView, MouseButtonEventArgs e)
    {
        var hit = e.OriginalSource as DependencyObject;
        while (hit != null && !(hit is TreeViewItem))
            hit = VisualTreeHelper.GetParent(hit);

        return hit as TreeViewItem;
    }
于 2017-01-04T11:26:26.267 に答える