2014-12-09 4 views
0

У меня есть DockPanel с некоторыми изображениями, вложенными внутрь.WPF Arrange Panel Children

<DockPanel x:Name="ControlStack" 
      Background="LightGray" 
      MouseLeftButtonUp="ECIControlStack_MouseLeftButtonUp"> 
    <DockPanel.Resources> 
     <Style TargetType="{x:Type Image}"> 
      <Setter Property="Margin" Value="0,0,3,0"/> 
     </Style> 
    </DockPanel.Resources> 
    <Image x:Name="FirstImage" Source="{Binding GpsImage}" Height="36" Width="36"/> 
    <Image x:Name="SecondImage" Source="{Binding YellowIcon}" Height="36"/> 
    <Image x:Name="ThirdImage" Source="{Binding RedIcon}" Height="36"/> 
    <Image x:Name="FourthImage" Source="{Binding GreenIcon}" Height="36"/> 
</DockPanel> 

Я хотел бы изменить порядок пунктов программно из кода позади или в любом месте.

Просто выполняйте некоторые общие манипуляции, пытаясь даже заставить объекты двигаться.

Я пытался что-то такое, как:

Rect rectangleBounds = new Rect(); 
rectangleBounds = ControlStack.RenderTransform.TransformBounds(
         new Rect(0, 0, ControlStack.Width, ControlStack.Height)); 

Canvas.SetLeft(FirstImage, rectangleBounds.Left + 100); 
Canvas.SetRight(FirstImage, rectangleBounds.Right + 100); 
Canvas.SetTop(FirstImage, rectangleBounds.Top + 100); 
Canvas.SetBottom(FirstImage, rectangleBounds.Bottom + 100); 

Но безрезультатно.

1.I не думаю, что это работает, потому что оно находится в докпанели, а не в холсте.

2. Даже если он работал, он перемещается свободно, и я предполагаю уничтожить порядок стека док-станции.

Спасибо, что посмотрели.

+1

Да, вы правы, вы не можете перемещать вещи в докпанели, за исключением перечислений панели док-станции или сложной логики смещения. http://msdn.microsoft.com/en-us/library/system.windows.controls.dock%28v=vs.110%29.aspx Чтобы сделать то, что вы хотите сделать, вам нужно изменить панель на холст , Вы можете сделать это и в сетке, но это сложнее ... –

+1

Если вы действительно хотите «изменить порядок элементов», вы можете легко удалить элемент из коллекции «Дети» DockPanel и вставить его снова в другая позиция индекса. – Clemens

ответ

0

Как указано в комментариях, изменение порядка проще всего, просто отрегулировав индекс изображений. Я закончил тем, что использовал:

private void SetTopImage() 
    { 
     Image NewTopImage = FindIconPriority(); // Finds what Icon I would like to have in front. 

     ControlStack.Children.Remove(NewTopImage); 
     ControlStack.Children.Insert(0, NewTopImage); 
    }