Cliquez et faites glisser la boîte de sélection en WPF
Est-il possible de mettre en œuvre la souris cliquez et faites glisser la boîte de sélection en WPF. Devrait-il être fait par le biais de simplement dessiner un rectangle, calculer les coordonnées de ses points et de l'évaluation de la position d'autres objets à l'intérieur de cette boîte? Ou y a t'il d'autres moyens?
Pourrait vous donner un peu d'exemple de code ou un lien?
Pour le dessin en particulier, c'est pas si simple, puisque vous aurez probablement besoin de votre boîte de sélection pour être tiré au-dessus de tout, et vos objets sont susceptibles UIElements eux-mêmes. Vous aurez besoin d'utiliser un décorateur.
Pavel, merci pour votre astuce. Je vais creuser dans le décorateur sujet. Si vous pouviez me donner encore un peu d'info (juste à l'étude de la direction) à l'aide d'ornement à cette fin, je serais reconnaissant. De toute façon, je vous remercie.
Pavel, merci pour votre astuce. Je vais creuser dans le décorateur sujet. Si vous pouviez me donner encore un peu d'info (juste à l'étude de la direction) à l'aide d'ornement à cette fin, je serais reconnaissant. De toute façon, je vous remercie.
OriginalL'auteur rem | 2009-12-03
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de code pour une technique simple que j'ai utilisé dans le passé pour dessiner un rectangle de sélection de la boîte.
XAML:
C#:
Génie! Ajouter un StrokeDashArray="2,1" à votre rectangle pour obtenir une ligne en pointillés de sélection.
Excellente solution. Une amélioration que je fait est d'ajouter le code suivant après le Point mousePos = e.GetPosition(theGrid); dans Grid_MouseMove() à la contrainte rectangle de sélection pour le parent de la Grille: si (mousePos.X < 0) mousePos.X = 0; if (mousePos.X > theGrid.ActualWidth) mousePos.X = theGrid.ActualWidth; si (mousePos.Y < 0) mousePos.Y = 0; if (mousePos.Y > theGrid.ActualHeight) mousePos.Y = theGrid.ActualHeight;
Il est plus facile d'utiliser VisualTreeHelper.HitTest(theGrid, mousePos) pour ce cas.
OriginalL'auteur Ashley Davis
Vous pouvez obtenir cette fonctionnalité assez facilement par l'ajout d'une InkCanvas et définir sa EditingMode pour Sélectionner. Bien qu'il soit principalement destiné aux PC de Comprimé de l'encre de collecte et de rendu, il est très facile de l'utiliser comme une base concepteur de surface.
Malheureusement, je n'arrive pas à trouver un moyen facile d'obtenir InkCanvas d'utiliser un rectangle de sélection. Il utilise le lasso de sélection. Mais oui, vous placez les éléments, et vous pouvez les sélectionner avec un lasso et faites-le glisser, redimensionner, etc. Vous pouvez désactiver le glisser/redimensionner la fonctionnalité par les propriétés sur l'InkCanvas.
J'ai mis ton code dans un test projet WPF et joué avec pendant un certain temps. Et oui, il semblait avoir beaucoup de fonctionnalités intéressantes, y compris ce que vous avez dit - lasso, de glisser, de les redimensionner. Je ne savais pas à ce sujet. Je vous remercie. Mais, vous savez, je ne pensais pas qu'il serait si difficile de trouver des informations sur la boîte de sélection. Pour être honnête, je m'attendais à être parmi la norme prédéfinie de la fonctionnalité, de dire, comme mettre le bouton sur la toile.. 🙂
Le InkCanvas est décrit dans le livre "Pro WPF en C# 2010" par M. MacDonald, p. 96. FYI.
OriginalL'auteur Josh
MouseDown logique:
OriginalL'auteur user7128900