在WPF中以编程方式更改元素的位置

aza*_*arp 20 wpf layout

我不知道这个简单的事情会有点复杂.我有一个Canvas,我试图动态添加Ellipse.这是代码:

<StackPanel>

        <Canvas Name="canvas" Background="LightBlue" Margin="5" Width="250" Height="250">

        </Canvas>

        <Button Content="Draw Images" Click="Button_Click" Width="100" Margin="10" />

    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

以下是代码背后的代码:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            Ellipse ellipse = new Ellipse();
            ellipse.Fill = Brushes.Red;
            ellipse.Width = 10;
            ellipse.Height = 10;

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

            canvas.Children.Add(ellipse); 


        }
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它抛出了100不是有效值的异常!

aza*_*arp 26

这是答案:

Canvas.SetLeft(ellipse,GetRandomValue());
Canvas.SetTop(ellipse,GetRandomValue());
Run Code Online (Sandbox Code Playgroud)


Ray*_*Ray 14

原因100不起作用是将其SetValue()解释为整数,但是Canvas.Top&Canvas.Left是双倍的.试试吧100d.还SetLeft()SetTop()工作,因为他们期望双打.


小智 8

以下代码有效:

ellipse.SetValue(Canvas.LeftProperty,100.0);
ellipse.SetValue(Canvas.TopProperty,100.0);
Run Code Online (Sandbox Code Playgroud)

值为双精度型.