WPF安排小组儿童

时间:2014-12-09 23:03:00

标签: c# wpf

我有一个DockPanel,其中一些图像嵌套在里面。

<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.我不认为这是有效的,因为它位于dockpanel而不是画布儿童?

2.即使它确实有效,它也会自由移动,我假设销毁了dockPanel堆栈顺序。

谢谢你看看。

1 个答案:

答案 0 :(得分: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);
    }