Je suis en train d'écrire une classe de groupe à partir de ces deux ressources:WPF Panel Draggable classe
- WPF: how to make the (0,0) in center inside a Canvas
- http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx
La classe du panneau aura deux propriétés attachées "X" et "Y" et si un élément donne x et y à zéro alors il sera placé au centre du panneau. Le panneau permettra également à l'utilisateur de faire glisser les choses. S'il vous plaît, aidez-moi à écrire cette classe. Je suis très nouveau à WPF.
C'est ainsi que je suis arrivé. Maintenant j'ai essayé d'implémenter ceci mais cela ne fonctionne pas, si vous pouvez m'aider à implémenter les fonctions GetTop, GetLeft, GetBottom, GetRight qui ne sont pas définies par défaut dans la classe panel et qui sont nécessaires. Si ces 4 méthodes sont présentes, les fonctions de glissement peuvent être implémentées ici.
using System;
using System.Linq;
using System.Windows;
using System.ComponentModel;
using System.Windows.Controls;
using System.Windows.Media;
namespace SmartERP.Elements
{
public class SmartCanvas : Panel
{
public static readonly DependencyProperty TopProperty;
public static readonly DependencyProperty LeftProperty;
public static readonly DependencyProperty BottomProperty;
public static readonly DependencyProperty RightProperty;
static SmartCanvas()
{
TopProperty = DependencyProperty.Register("Top", typeof(double), typeof(SmartCanvas), new PropertyMetadata(0.0));
LeftProperty = DependencyProperty.Register("Left", typeof(double), typeof(SmartCanvas), new PropertyMetadata(0.0));
BottomProperty = DependencyProperty.Register("Bottom", typeof(double), typeof(SmartCanvas), new PropertyMetadata(0.0));
RightProperty = DependencyProperty.Register("Right", typeof(double), typeof(SmartCanvas), new PropertyMetadata(0.0));
}
public double Top
{
get { return (double)base.GetValue(TopProperty); }
set { base.SetValue(TopProperty, value); }
}
public double Bottom
{
get { return (double)base.GetValue(BottomProperty); }
set { base.SetValue(BottomProperty, value); }
}
public double Left
{
get { return (double)base.GetValue(LeftProperty); }
set { base.SetValue(LeftProperty, value); }
}
public double Right
{
get { return (double)base.GetValue(RightProperty); }
set { base.SetValue(RightProperty, value); }
}
private double GetTop(UIElement element)
{
return (double)this.GetValue(TopProperty);
}
private double GetLeft(UIElement element)
{
return (double)this.GetValue(LeftProperty);
}
private double GetBottom(UIElement element)
{
return (double)this.GetValue(BottomProperty);
}
private double GetRight(UIElement element)
{
return (double)this.GetValue(RightProperty);
}
protected override Size ArrangeOverride(Size arrangeSize)
{
Point middle = new Point(arrangeSize.Width/2, arrangeSize.Height/2);
foreach (UIElement element in base.InternalChildren)
{
if (element == null)
{
continue;
}
double x = 0.0;
double y = 0.0;
double left = GetLeft(element);
if (!double.IsNaN(left))
{
x = left;
}
double top = GetTop(element);
if (!double.IsNaN(top))
{
y = top;
}
element.Arrange(new Rect(new Point(middle.X + x, middle.Y + y), element.DesiredSize));
}
return arrangeSize;
}
}
}
Qu'est-ce que vous avez jusqu'ici et où êtes-vous exactement coincé? – Heinzi
Comment puis-je l'implémenter? S'il vous plaît aider. –
Soham, vous n'avez pas expliqué ce que vous essayez de mettre en œuvre. Comment pouvons-nous répondre à une question quand nous ne savons pas quelle est la question? Qu'est-ce que vous essayez d'accomplir? Qu'est-ce que votre code fait ou ne fait pas actuellement? Comment s'écarte-t-il du comportement attendu? Comment votre panneau personnalisé est-il utilisé (avec un exemple de code)? Expliquez ces choses et quelqu'un ici peut probablement vous orienter dans la bonne direction. –