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

发布于 2024-11-26 01:13:16 字数 558 浏览 2 评论 0原文

我在画布中有 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

I have stackpanel in a canvas

The stackpanel has

 <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>

At runtime I need to change the location of the objects within the StackPanel.

Ie seekBar.Canvas.Left = 50

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

妄断弥空 2024-12-03 01:13:16

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

Canvas.SetLeft(myStackPanel, 50);

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

The "Canvas.Left" is an example of attached dependency property. The syntax for the C# is:

Canvas.SetLeft(myStackPanel, 50);

Where myStackPanel is any custom name you must assign using x.Name in the xaml.

望喜 2024-12-03 01:13:16

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

You should use Canvas.SetLeft and Canvas.SetRight methods.

怪我入戏太深 2024-12-03 01:13:16

警告:我假设:

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

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


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

为此,您需要为您的 StackPanel 命名。我将其称为堆栈

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

Canvas.SetLeft(stack, 50);

或这样做:

stack.SetValue(Canvas.LeftProperty, 50);

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

Caveat: I'm assuming that by this:

At runtime i need to change the location of the objects within the StackPanel.

You mean that you need to be able to set the Left position of the StackPanel itself (irrespective of what it contains). If this is not what you mean (for example, you don't have anything called seekBar in your example Xaml, even though you reference it in your code), please clarify.


The Canvas uses Attached Dependency Properties (as do other layout items, such as the Grid) to track layout information about contained items. Because of this, you'll either have to use the GetLeft and SetLeft functions on Canvas, GetValue and SetValue functions on your StackPanel to manipulate these values.

Do this, you'll need to give your StackPanel a name. I'll call it stack.

Given your example, you would do either this:

Canvas.SetLeft(stack, 50);

or this:

stack.SetValue(Canvas.LeftProperty, 50);

Note that the first version (SetLeft) is simply a wrapper around the second version, so use whichever you prefer.

冰雪梦之恋 2024-12-03 01:13:16

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

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

You can get the value of any control by var x = btn.TransformToAncestor(this).Transform(new Point(0, 0));
where btn is the control which you want the margin of.

And then use yourstackpanel.SetValue(StackPanel.MarginProperty,new Thickness());

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文