我在画布中有堆叠面板
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中对象的位置。
即seekBar.Canvas.Left = 50
答案 0 :(得分:2)
“Canvas.Left”是附加依赖项属性的示例。 C#的语法是:
Canvas.SetLeft(myStackPanel, 50);
myStackPanel是任何自定义名称,您必须使用xaml中的x.Name分配。
答案 1 :(得分:1)
您应该使用Canvas.SetLeft和Canvas.SetRight方法。
答案 2 :(得分:0)
警告:我假设是这样的:
在运行时,我需要更改StackPanel中对象的位置。
您的意思是您需要能够设置Left
本身的StackPanel
位置(无论其包含的内容)。如果这不是您的意思(例如,您的示例Xaml中没有任何名为seekBar
的内容,即使您在代码中引用它),请澄清。
Canvas
使用附加依赖项属性(与其他布局项一样,例如Grid
)来跟踪有关所包含项的布局信息。因此,您必须使用GetLeft
上的SetLeft
,Canvas
和GetValue
函数SetValue
和StackPanel
函数操纵这些价值观。
执行此操作,您需要为StackPanel
命名。我称之为stack
。
根据你的例子,你可以这样做:
Canvas.SetLeft(stack, 50);
或者这个:
stack.SetValue(Canvas.LeftProperty, 50);
请注意,第一个版本(SetLeft
)只是第二个版本的包装器,因此请使用您喜欢的版本。
答案 3 :(得分:0)
您可以通过var x = btn.TransformToAncestor(this).Transform(new Point(0, 0));
获取任何控件的值
其中btn是你想要的边距的控件。
然后使用yourstackpanel.SetValue(StackPanel.MarginProperty,new Thickness());