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

时间:2011-07-25 15:53:16

标签: c# wpf canvas 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中对象的位置。

即seekBar.Canvas.Left = 50

4 个答案:

答案 0 :(得分:2)

“Canvas.Left”是附加依赖项属性的示例。 C#的语法是:

Canvas.SetLeft(myStackPanel, 50);

myStackPanel是任何自定义名称,您必须使用xaml中的x.Name分配。

答案 1 :(得分:1)

您应该使用Canvas.SetLeftCanvas.SetRight方法。

答案 2 :(得分:0)

警告:我假设是这样的:

  

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

您的意思是您需要能够设置Left本身的StackPanel位置(无论其包含的内容)。如果这不是您的意思(例如,您的示例Xaml中没有任何名为seekBar的内容,即使您在代码中引用它),请澄清。


Canvas使用附加依赖项属性(与其他布局项一样,例如Grid)来跟踪有关所包含项的布局信息。因此,您必须使用GetLeft上的SetLeftCanvasGetValue函数SetValueStackPanel函数操纵这些价值观。

执行此操作,您需要为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());