以编程方式更改画布上的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中对象的位置。
>
"左"是附加依赖属性的一个例子。c#的语法是:
Canvas.SetLeft(myStackPanel, 50);
myStackPanel是任何自定义的名称,你必须在xaml.
你应该使用Canvas。SetLeft和Canvas。SetRight方法。
警告:我假设通过这个:
在运行时,我需要改变StackPanel中对象的位置。
你的意思是你需要能够设置StackPanel
本身的Left
位置(不管它包含什么)。如果这不是你的意思(例如,你没有任何东西称为seekBar
在你的例子Xaml,即使你引用它在你的代码),请澄清。
Canvas
使用附加依赖属性(就像其他布局项一样,比如Grid
)来跟踪包含项目的布局信息。因此,您必须在Canvas
上使用GetLeft
和SetLeft
函数,在StackPanel
上使用GetValue
和SetValue
函数来操作这些值。
这样做,你需要给你的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());