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
Rechtsklick selektiert solch ein Item nicht, das ist korrekt.
Ich habe das in meiner EnhancedTreeView bereits gelöst, siehe "EnhancedTreeView_PreviewMouseRightButtonDown"
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.
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?!
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
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