2011-07-25 52 views
2

我的StackPanel在畫布變化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

任何想法

回答

2

「Canvas.Left」是連接依賴屬性的一個示例。對於C#的語法是:

Canvas.SetLeft(myStackPanel, 50); 

哪裏myStackPanel是必須分配在XAML中使用x.Name任何自定義名稱。

+0

做,什麼也不做 –

+0

我不知道要了解什麼是你的目標。 –

0

警告:我假設這個:

在運行時我需要改變的StackPanel內的物體的位置。

你的意思是,你需要能夠設置StackPanel本身的Left位置(不管它包含什麼)。如果這不是您的意思(例如,您的示例Xaml中沒有任何稱爲seekBar的內容,即使您在代碼中引用它),請澄清。


Canvas採用附加依賴屬性(如做其他佈局項目,如Grid)跟蹤有關包含的項目佈局信息。因此,您需要使用Canvas,GetValueSetValue函數上的GetLeftSetLeft函數來調整這些值。

做到這一點,你需要給你的StackPanel一個名字。我會稱之爲stack

鑑於你的榜樣,你會做任何這樣的:

Canvas.SetLeft(stack, 50); 

或本:

stack.SetValue(Canvas.LeftProperty, 50); 

注意,第一個版本(SetLeft),它僅僅是第二個版本的包裝,所以在使用無論你喜歡什麼。

+0

滑塊稱爲seekBar –

0

您可以通過var x = btn.TransformToAncestor(this).Transform(new Point(0, 0)); 獲得任何控制的值,其中btn是您希望保留的控件。

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