以编程方式更改画布上的StackPanel位置

本文关键字:StackPanel 位置 编程 方式更 | 更新日期: 2023-09-27 18:03:31

我在画布中有stackpanel

stackpanel有

 <Canvas x:Name="MyCanvas">
            <Slider Template="{StaticResource simpleSlider}"  x:Name="seekBar" Thumb.DragStarted="seekBar_DragStarted" Thumb.DragCompleted="seekBar_DragCompleted" Canvas.Left="347" Canvas.Top="746" Width="900" Height="2" />
            <Rectangle Height="5" />
       <StackPanel Canvas.Left="200" Canvas.Right = "100">
       </StackPanel>
 </Canvas>

在运行时,我需要改变StackPanel中对象的位置。

>

以编程方式更改画布上的StackPanel位置

"左"是附加依赖属性的一个例子。c#的语法是:

Canvas.SetLeft(myStackPanel, 50);

myStackPanel是任何自定义的名称,你必须在xaml.

你应该使用Canvas。SetLeft和Canvas。SetRight方法。

警告:我假设通过这个:

在运行时,我需要改变StackPanel中对象的位置。

你的意思是你需要能够设置StackPanel本身的Left位置(不管它包含什么)。如果这不是你的意思(例如,你没有任何东西称为seekBar在你的例子Xaml,即使你引用它在你的代码),请澄清。


Canvas使用附加依赖属性(就像其他布局项一样,比如Grid)来跟踪包含项目的布局信息。因此,您必须在Canvas上使用GetLeftSetLeft函数,在StackPanel上使用GetValueSetValue函数来操作这些值。

这样做,你需要给你的StackPanel一个名字。命名为stack

对于您的示例,您可以这样做:

Canvas.SetLeft(stack, 50);

或:

stack.SetValue(Canvas.LeftProperty, 50);

请注意,第一个版本(SetLeft)只是第二个版本的包装器,所以使用您喜欢的任何一个版本。

您可以通过var x = btn.TransformToAncestor(this).Transform(new Point(0, 0));获取任何控件的值其中BTN是你想要的边距控件。

然后使用yourstackpanel.SetValue(StackPanel.MarginProperty,new Thickness());