Laden...

MouseRightButtonDown TreeViewItem HILFE (Silverlight 4)

Erstellt von elron vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.784 Views
E
elron Themenstarter:in
171 Beiträge seit 2004
vor 13 Jahren
MouseRightButtonDown TreeViewItem HILFE (Silverlight 4)

Also ich bin mal wieder kurz davor meinen Rechner aus dem Fenster zu werfen 😄

Ich suche jetzt schon x Stunden nach einer Lösung wie ich mit der RMT ein TreeViewItem selektiere ..

Ich bekomme das irgendwie nicht hin.

Mit der LMT funtioniert das logischerweise.

Beispiel:


 private void MainTreeView_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{           
       e.Handled = true;
       TreeViewItem item = (TreeViewItem)((TreeView)sender).SelectedItem;
}

Das item ist hier null, weil es nicht selektiert ist "grr"

Es gibt auch nicht die Möglichkeit wie z.b. bei windows Forms sich aH. von der
Mausposition "Hier in Silverlight 4"

Point p = e.GetPosition(MainTreeView);

sich das TreeViewItem geben zu lassen oder es auf IsSelected = true zu stellen.

Kann mir jemand hier einen Tipp geben ?

Grüße an die Community

U
1.578 Beiträge seit 2009
vor 13 Jahren

Rechtsklick selektiert solch ein Item nicht, das ist korrekt.
Ich habe das in meiner EnhancedTreeView bereits gelöst, siehe "EnhancedTreeView_PreviewMouseRightButtonDown"

E
elron Themenstarter:in
171 Beiträge seit 2004
vor 13 Jahren

Danke für die schnelle Antwort.
Das ist aber für WPF Anwendungen richtig?

Für den kleine Bruder Silverlight gibt es das Interface "IInputElement" und auch die Method "InputHitTest" nicht.

kann das sein ?

Besten Dank vorrab.

U
1.578 Beiträge seit 2009
vor 13 Jahren

Ach Silverlight, das dreckszeuch ^^

Da gibt es HitTest so nicht, es gibt aber System.Windows.Media.VisualTreeHelper.HitTest laut internet.
Eventuell kannst du mit dem Ergebnis etwas anfangen, wenns schon das korrekte Control beinhaltet kannste dann mit dem VisualTreeHelper hoch klettern bis du das TreeViewItem hast um dann IsSelected zu setzen.

//Dazu
Ist in Silverlight Rechtsklick überhaupt möglich? Ich dachte dann kommt immer das SL context Menü und kein Control bekommt davon mit?!

E
elron Themenstarter:in
171 Beiträge seit 2004
vor 13 Jahren

Ja ist möglich, siehe ersten Post "e.Handled = true;"

Funktioniert aber nur beim "MouseRightButtonDown"
bei "MouseRightButtonUp" ist das kind leider schon in den Brunnen gefallen 😉

Und danke, ich schau mir mal den "VisualTreeHelper" an.

Wenn ich es hier hinbekommen "ich hoffe sehr" dann poste ich die Lösung.

Grüße

E
elron Themenstarter:in
171 Beiträge seit 2004
vor 13 Jahren

So hier schnell noch die Lösung 😃


 private void MainTreeView_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
        {
            TreeView control = (TreeView)sender;

            Point rootVisualPoint = e.GetPosition(Application.Current.RootVisual as UIElement);
            Point contextMenuPoint = e.GetPosition(control);

            IEnumerable<UIElement> elementCollection = VisualTreeHelper.FindElementsInHostCoordinates(rootVisualPoint, control);
            
            List<TreeViewItem> treeViewItemList = new List<TreeViewItem>();

            foreach (UIElement element in elementCollection)
                if (element is TreeViewItem)
                    treeViewItemList.Add((TreeViewItem)element);

            if (treeViewItemList.Count > 0)
                treeViewItemList[0].IsSelected = true;
        }

Geht bestimmt noch besser 😃

Grüße