WPF Rechteck bewegen

xlShortylx

Cadet 4th Year
Registriert
Sep. 2012
Beiträge
103
Hallo,

ich möchte eine Art Slider programmieren (mit einfachsten Mitteln) um eine Gruppe von Controls verschieben zu können (soll in der Art wie ein Swipe auf einem Smartphone sein). Das wollte ich nur kurz anhand eines Rechtecks testen, das ich dann mit der Maus verschieben kann.

Dabei gibt es 2 Probleme:

1. Das Rechteck kann sich nicht so schnell mit der Maus mitbewegen, d.h. ich komme mit der Maus aus dem Rechteck heraus und somit bleibt das Rechteck auf der Stelle liegen.

2. Wenn ich das Rechteck zu weit nach rechts bewege, verkleinert sich das Rechteck immer weiter (siehe Bilder). Irgendwie kann ich nicht nachvollziehen, wieso das geschieht.

b1.JPGb2.JPGb3.JPG


Hierzu der Code:

Code:
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        
        bool ismousedown = false;
        double rec_x = 0;

        private void rec_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ismousedown = true;
            rec_x = e.GetPosition(rec).X;
        }

        private void rec_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            ismousedown = false;
        }

        private void Rectangle_MouseMove(object sender, MouseEventArgs e)
        {
            if (!ismousedown)
                return;
            double mousePosition_x = e.GetPosition(rec).X;
            double mousePosition_y = e.GetPosition(rec).Y;
            rec.Margin = new Thickness(rec.Margin.Left + mousePosition_x - rec_x, rec.Margin.Top,
                rec.Margin.Right + mousePosition_x - rec_x, rec.Margin.Bottom);
        }
    }

Alles "schön" programmieren werde ich erst wenn das auch funktioniert, also bitte keine Kommentare bezüglich der Rechnungen.
 
Ohne deine XAML-Definition kann ich zu deinem 2. Problem nur sagen, woran es vermutlich liegt:

Ich sehe auf deinem Bild, dass der rechte Teil des Rechtecks einfach "rausfällt", also dass das Rechteck über den Rand eines Elterncontainers (<Grid/>?) geht. Guck mal, ob dem so ist und ob du eventuell das Padding des Grids anpassen kannst, dass das nicht mehr passiert (Ich meine jedenfalls, dass das Anpassen des Paddings hilft - gibt im Visual Studio Designer diese "Kanten" pro Seite des Rechtecks die du drücken kannst).
 
Hi CryNickSystems, danke für die Antwort.

Ich wollte den XAML-Code eigentlich auch posten, habe es dann anscheinend übersehen.

XAML

Code:
<Window x:Class="MoveButtonTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Rectangle Name="rec" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="23" Stroke="Black" VerticalAlignment="Top" Width="180" 
                   MouseMove="Rectangle_MouseMove" MouseLeftButtonDown="rec_MouseLeftButtonDown" MouseLeftButtonUp="rec_MouseLeftButtonUp" Margin="239,76,0,0"/>
        <Button Content="Write File" HorizontalAlignment="Left" Margin="432,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
    </Grid>
</Window>


Ich habe das ganze jetzt einfach mit einem Canvas gelöst, mir ist gerade auch aufgefallen, dass die Operatoren beim Setzen des margin.Right Properties verkehrt herum waren, trotzdem würde mich interessierten wieso das Problem nicht kontinuierlich auftritt.
 
Zurück
Oben