J'essaie de permettre une sélection de type élastique ou lasso des éléments de la liste que l'utilisateur veut sélectionner. Ma liste est dans une grille et à la grille j'ai ajouté un contrôle qui dessine un rectangle sur la zone que je veux sélectionner. J'ai essayé de tester les éléments de la liste de sélection pour voir s'ils tombent dans le rectangle, mais ils semblent tous renvoyer qu'ils ne le font pas. Lorsque vous regardez le VisualTreeHelper.GetDescendantBounds pour ces éléments (comme je le fais pour le rectangle pour obtenir X, Y) il renvoie toujours X, Y comme 0,0 pour chacun des éléments. Qu'est-ce que je fais de mal avec le hittesting?WPF implémentant une sélection du type de bande élastique dans une zone de liste
0
A
Répondre
0
Vous pouvez utiliser ce code pour obtenir la position et les limites de UIElements par rapport à un autre UIElement. Le code provient du this post.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
public static class UIHelper
{
public static Boolean GetUIElementCornersRelativTo(UIElement Base,
UIElement RelativeTo,
ref Point TopLeft,
ref Point BottomLeft,
ref Point BottomRight,
ref Point TopRight,
ref String Message)
{
try
{
if (Base == null)
{
throw new Exception("Base UIElement is null");
}
if (RelativeTo == null)
{
throw new Exception("RelativTo UIElement is null");
}
TopLeft = Base.TranslatePoint(new Point(0, 0), RelativeTo);
BottomLeft = Base.TranslatePoint(new Point(0, Base.RenderSize.Height), RelativeTo);
BottomRight = Base.TranslatePoint(new Point(Base.RenderSize.Width, Base.RenderSize.Height), RelativeTo);
TopRight = Base.TranslatePoint(new Point(Base.RenderSize.Width, 0), RelativeTo);
Message = "OK";
return true;
}
catch (Exception ex)
{
Message = ex.Message;
return false;
}
}
public static Boolean GetPointRelativTo(UIElement Base,
UIElement RelativeTo,
Point ToProjectPoint,
ref Point Result,
ref String Message)
{
try
{
if (Base == null)
{
throw new Exception("Base UIElement is null");
}
if (RelativeTo == null)
{
throw new Exception("RelativTo UIElement is null");
}
if (ToProjectPoint == null)
{
throw new Exception("To project point is null");
}
Result = Base.TranslatePoint(ToProjectPoint, RelativeTo);
Message = "OK";
return true;
}
catch (Exception ex)
{
Message = ex.Message;
return false;
}
}
}