【问题标题】:Change StackPanel location on a Canvas programmatically以编程方式更改 Canvas 上的 StackPanel 位置
【发布时间】:2011-07-25 15:53:16
【问题描述】:

我在画布中有堆栈面板

堆栈面板有

 <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

【问题讨论】:

    标签: c# wpf canvas stackpanel


    【解决方案1】:

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

    Canvas.SetLeft(myStackPanel, 50);
    

    其中 myStackPanel 是您必须在 xaml 中使用 x.Name 指定的任何自定义名称。

    【讨论】:

    • 我不确定你的目标是什么。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      警告:我假设这样:

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

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


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

      执行此操作,您需要为您的StackPanel 命名。我就叫它stack

      根据您的示例,您可以这样做:

      Canvas.SetLeft(stack, 50);
      

      或者这个:

      stack.SetValue(Canvas.LeftProperty, 50);
      

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-07-16
          • 1970-01-01
          • 2012-01-12
          • 2011-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多