Laden...

TranslateTransform funktioniert nur beim ersten mal richtig

Erstellt von Schnueggel vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.420 Views
S
Schnueggel Themenstarter:in
54 Beiträge seit 2007
vor 15 Jahren
TranslateTransform funktioniert nur beim ersten mal richtig

Hab bisschen rumgespielt mit WPF um zu testen wie flexibel das ganze ist, eigentlich wollte ich noch skalieren, aber nuja ^^. Ich habe deshalb versucht ein Grid zu bewegen bei MouseDown und LeftMouseButtonDown. Funktioniert auch , aber nur beim ersten mal wenn ich die Maus loslasse und nochmal versuche huckelt es. Weiss jemand vielleicht wo mein Denkfehler ist. Hab wenig Ahnung von Xaml, kann vllt daran liegen.



    public partial class Window1 : Window
    {
        private bool movebool = false;
        private double mousex;
        private double mousey;
        private TransformGroup group;
        private TranslateTransform translate;
 

        public Window1()
        {
            InitializeComponent();
            group = new TransformGroup();
            translate = new TranslateTransform();

            group.Children.Add(translate);

            grid1.RenderTransform = group;
 
        }

 

        private void grid1_mousedown(object sender, MouseEventArgs e)
        {
            
            this.movebool = true;
            mousex = e.GetPosition(this).X;
            mousey = e.GetPosition(this).Y;
            this.button2.Content = mousex;

            


        }

        private void grid1_mouseup(object sender, MouseEventArgs e)
        {
            button2.Content = "hehehehe";
            this.movebool = false;
            this.button2.Content = e.GetPosition(this).X ;
           


        }

        private void grid1_mousemove(object sender, MouseEventArgs e)
        {
            if (movebool == true && e.LeftButton == MouseButtonState.Pressed)
            {
                translate.X = e.GetPosition(this).X - mousex;
                translate.Y = e.GetPosition(this).Y - mousey;
                this.button1.Content = e.GetPosition(this).X.ToString() + "-"+ mousex.ToString() ;
            }
            else
            {
                this.movebool = false;
            }
        }
    }



<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="390" Width="386" >
    <Canvas x:Name="test1" Height="358" Width="359" MouseMove="grid1_mousemove">
        <Grid Margin="88,112,0,0" Name="grid1"  MouseLeftButtonDown="grid1_mousedown" MouseLeftButtonUp="grid1_mouseup"  Height="100"  Background="Beige"  Width="200">
           
                <Button Margin="48,28,68,49" Name="button1">
                    <Button.Content>test</Button.Content> 
                </Button>
                <Button Margin="23,0,93,8" Name="button2" Height="36" VerticalAlignment="Bottom">Button</Button>
        </Grid>
    </Canvas>
</Window>

B
21 Beiträge seit 2008
vor 15 Jahren

Ich habe zwar nicht deinen Code ausprobiert aber da scheint einiges im argen zu sein. Hast du dir den Code irgendwo aus dem Web gezogen oder selber ausprobiert?

Also das Margin in dem Grid solltest du weg machen und stattdessen die Canvas AttachedProperties nehmen. Mit Margin sollte man nicht positionieren!
also:
<Canvas>
<Grid Canvas.Top="10" Canvas.Left="30"/>
</Canvas>

Wenn es dann noch hacken sollte könntest du in der CodeBehind beim Grid die Canvas Properties direkt setzen:

Canvas.SetTop(mygrid, y)
Canvas.SetLeft(mygrid, x)

Hope it helps

Benjamin

S
Schnueggel Themenstarter:in
54 Beiträge seit 2007
vor 15 Jahren

Das mit dem Margin macht mir Vs2008 ständig ich klick es immer weg, und bisschen später ist es wieder da. Aber danke für deine Antwort. Ich werd die Finger erst mal von WPF lassen, da wo meine Programme laufen,sind zum Teil ISA Slots noch im Trend, also Grakamäßig darf man da keine erwartung stellen. Von daher ist WPF tabu denke ich mal.