以编程方式更改 StackPanel 在 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
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
“Canvas.Left”是附加依赖属性的示例。 C# 的语法为:
其中 myStackPanel 是您必须使用 xaml 中的 x.Name 分配的任何自定义名称。
The "Canvas.Left" is an example of attached dependency property. The syntax for the C# is:
Where myStackPanel is any custom name you must assign using x.Name in the xaml.
您应该使用 Canvas.SetLeft 和Canvas.SetRight 方法。
You should use Canvas.SetLeft and Canvas.SetRight methods.
警告:我假设:
您的意思是您需要能够设置 StackPanel 本身的 Left 位置(无论它包含什么)。如果这不是您的意思(例如,您的示例 Xaml 中没有任何名为
seekBar
的内容,即使您在代码中引用了它),请澄清。Canvas
使用附加依赖属性(与其他布局项一样,例如Grid
)来跟踪有关所包含项的布局信息。因此,您必须在Canvas
、GetValue
和Canvas
上使用GetLeft
和SetLeft
函数。StackPanel
上的 code>SetValue 函数来操作这些值。为此,您需要为您的
StackPanel
命名。我将其称为堆栈
。根据您的示例,您可以这样做:
或这样做:
请注意,第一个版本 (
SetLeft
) 只是第二个版本的包装器,因此请使用您喜欢的版本。Caveat: I'm assuming that by this:
You mean that you need to be able to set the
Left
position of theStackPanel
itself (irrespective of what it contains). If this is not what you mean (for example, you don't have anything calledseekBar
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 theGrid
) to track layout information about contained items. Because of this, you'll either have to use theGetLeft
andSetLeft
functions onCanvas
,GetValue
andSetValue
functions on yourStackPanel
to manipulate these values.Do this, you'll need to give your
StackPanel
a name. I'll call itstack
.Given your example, you would do either this:
or this:
Note that the first version (
SetLeft
) is simply a wrapper around the second version, so use whichever you prefer.您可以通过 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());