Ich bin ziemlich neu zu WPF, so dass ich das meiste davon die harte (aber Spaß) Art und Weise lernen. Ich konstruiere eine HSV-ähnliche Colorpicker-Benutzersteuerung und möchte das Verhalten erhalten, wo der Daumen, den ich verwende, da der "Selektor" auf einen elliptischen Bereich (Kreis tatsächlich) beschränkt ist. Wenn sie nach außen bewegt wird, sollte der Wahlschalter an der Seite bleiben und sich überhaupt nicht bewegen. Ich glaube, das ist das häufigste GUI-Verhalten, also sollte es sich so verhalten. Fühlen Sie sich frei, ein besseres Verhalten vorzuschlagen!Limit Thumb auf elliptischen Bereich
Gibt es eine gemeinsame, bekannte und empfohlene Lösung oder ist es jedem selbst überlassen, das Rad jedes Mal neu zu erfinden?
Irgendwelche guten Ideen, wie man das löst?
-Code-behind:
public partial class HSVColorPicker : UserControl
{
public HSVColorPicker()
{
InitializeComponent();
}
void onDragDelta(object sender, DragDeltaEventArgs e)
{
Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) + e.HorizontalChange);
Canvas.SetTop(thumb, Canvas.GetTop(thumb) + e.VerticalChange);
}
}
XAML:
<Grid>
<Canvas x:Name="canvas">
<Image x:Name="wheel" Source="colorwheel.png" Width="300" Margin="5,5,0,0"/>
<Thumb Name="thumb" DragDelta="onDragDelta" Canvas.Left="104" Canvas.Top="68" Template="{StaticResource thumbTemplate}" />
</Canvas>
</Grid>
Während ich hier bin, ist der Daumen immer hinter dem Cursor zieht, gibt es eine andere Möglichkeit, dies zu schaffen? Wie ich schon sagte, ich bin neu in WPF und GUI-Erstellung insgesamt, vielleicht gibt es offensichtliche Lösungen, die mir nicht eingefallen sind;)
Danke, obwohl es nicht unbeweglich an der Kante bleibt, während der Cursor draußen ist, haben Sie definitiv einen großen Teil der Arbeit! Der Daumen und der Cursor werden auch getrennt, wenn der Cursor verlässt und wieder eingeht, also werde ich etwas debuggen und Ihre Antwort akzeptieren. Wird meine endgültige Lösung posten, wenn Sie fertig sind. – Bob