Frage

Ich habe einen treeview Artikel als solche in einer Baumansicht, die eine Liste gebunden, um es haben:

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

Ich kann nicht herausfinden, wie jeder seiner Childs bekommen ein Doppelklickereignis haben.

Jede Hilfe ist willkommen. Dank viel.

War es hilfreich?

Lösung

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...

Andere Tipps

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...

Und dann hat der Handler geschrieben wird wie folgt vor, um den Doppelklick aus dem Brennen auf aufeinanderfolgenden Mutter TreeViewItems zu verhindern:

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

        .... do stuff.

    }

Dank Aurelien Ribon für immer 90% des Weges dorthin. Das Doppelklick Problem scheint in anderen Postings auf Stapel Wechseln gut bekannt zu sein. Gerade die Konsolidierung beiden Lösungen in eine Antwort.

Dies ist der einzige Weg, ich schaffte es an die Arbeit zu machen für alle Fälle:

    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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top