Изменить местоположение StackPanel на Canvas программным способом - PullRequest
2 голосов
/ 25 июля 2011

У меня есть стековая панель на холсте

У стековой панели

 <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..Canvas.Left = 50

Ответы [ 4 ]

2 голосов
/ 25 июля 2011

"Canvas.Left" является примером присоединенного свойства зависимости.Синтаксис для C #:

Canvas.SetLeft(myStackPanel, 50);

Где myStackPanel - любое пользовательское имя, которое вы должны назначить, используя x.Name в xaml.

1 голос
/ 25 июля 2011

Вы должны использовать методы Canvas.SetLeft и Canvas.SetRight .

0 голосов
/ 29 мая 2015

Вы можете получить значение любого элемента управления var x = btn.TransformToAncestor(this).Transform(new Point(0, 0)); где btn - это элемент управления, для которого вы хотите использовать поле.

А затем используйте yourstackpanel.SetValue(StackPanel.MarginProperty,new Thickness());

0 голосов
/ 25 июля 2011

Предостережение: Я предполагаю, что это:

Во время выполнения мне нужно изменить расположение объектов в StackPanel.

Вы имеете в виду, что вам нужно иметь возможность установить Left положение самого StackPanel (независимо от того, что оно содержит). Если это не то, что вы имеете в виду (например, в вашем примере Xaml нет ничего под названием seekBar, даже если вы ссылаетесь на это в своем коде), уточните.


Canvas использует свойства присоединенной зависимости (как и другие элементы макета, такие как Grid) для отслеживания информации макета о содержащихся элементах. По этой причине вам придется либо использовать функции GetLeft и SetLeft для функций Canvas, GetValue и SetValue на StackPanel для манипулирования этими значениями.

Сделайте это, вам нужно дать вашему StackPanel имя. Я назову это stack.

Учитывая ваш пример, вы бы сделали так:

Canvas.SetLeft(stack, 50);

или это:

stack.SetValue(Canvas.LeftProperty, 50);

Обратите внимание, что первая версия (SetLeft) - это просто оболочка вокруг второй версии, поэтому используйте любую, какую пожелаете.

...