Changing Position of an Element Programmatically in WPF

前端 未结 6 1283
时光说笑
时光说笑 2020-12-16 11:40

I did not knew that this simple thing would be slightly complicated. I have a Canvas in which I am trying to add Ellipse dynamically. Here is the code:

<         


        
相关标签:
6条回答
  • 2020-12-16 11:52

    Try to convert integer type to Double type using "CDbl" function

    Try this:

    ellipse.SetValue(Canvas.LeftProperty,Cdbl(100));
    
    0 讨论(0)
  • 2020-12-16 11:55

    The code below works:

    ellipse.SetValue(Canvas.LeftProperty,100.0);
    ellipse.SetValue(Canvas.TopProperty,100.0);
    

    The values are of the double type.

    0 讨论(0)
  • 2020-12-16 11:56

    Here is the answer:

    Canvas.SetLeft(ellipse,GetRandomValue());
    Canvas.SetTop(ellipse,GetRandomValue());
    
    0 讨论(0)
  • 2020-12-16 12:13

    The reason 100 doesn't work is that SetValue() interprets it as an integer, but Canvas.Top & Canvas.Left are doubles. Try 100d instead. Also SetLeft() & SetTop() work because they expect doubles.

    0 讨论(0)
  • 2020-12-16 12:13

    if you want to move your canvas with matrix you should do like this :

    <Canvas Name="mcanvas" >
       <Canvas.RenderTransform>
         <MatrixTransform x:Name="mt"/>
       </Canvas.RenderTransform>
    </Canvas>
    

    then you can do all works you want, on Matrix "mt". Like this :

    For Scale:

    Matrix matrix = new Matrix();
    matrix.Scale(1.5, 1.5);
    mt.Matrix = matrix;
    mcanvas.LayoutTransform = Transform.Identity;
    

    For Translate ( Changing Position ) :

    Matrix matrix = new Matrix();
    matrix.Translate(50, 0);
    mt.Matrix = matrix;
    mcanvas.LayoutTransform = Transform.Identity;
    

    And if you want to create a canvas element programmatically, you should do like this :

    Ellipse el = new Ellipse();
    Matrix matrix = new Matrix();
    matrix.Translate(50, 0);
    matrix.Scale(1.5,1.5);
    el.RenderTransform = new MatrixTransform(matrix);
    

    Hope this helps you.

    0 讨论(0)
  • 2020-12-16 12:14

    The Left and Top are attached properties owned by Canvas class, that you can attach to any DependencyObject, whether it is a FrameworkElement or not and whether it is hosted in a Canvas or not.

    That's why you have to use:

    myDependencyObject.SetValue(Canvas.LeftProperty, leftValue); myDependencyObject.SetValue(Canvas.TopProperty, topValue);

    Most other containers, say the Grid will just ignore those property values, if our dependency object is a FrameworkElement contained in them instead of inside a Canvas. One could make though other containers that respect those properties

    0 讨论(0)
提交回复
热议问题