C# 在运行时更改图像控件的z顺序windows phone

C# 在运行时更改图像控件的z顺序windows phone,c#,silverlight,windows-phone-8,z-order,C#,Silverlight,Windows Phone 8,Z Order,我在画布上放置了几个图像控件。当用户单击应用程序栏按钮时,我想更改所选图像控件的z顺序 在图像控制类中,我有 public int ImageZOrder { get { return _imageZOrder; } set { _imageZOrder = value; Canvas.SetZInd

我在画布上放置了几个图像控件。当用户单击应用程序栏按钮时,我想更改所选图像控件的
z顺序

图像控制
类中,我有

    public int ImageZOrder 
    { 
        get
        {
            return _imageZOrder;            
        }
        set 
        {
            _imageZOrder = value;
            Canvas.SetZIndex(ImageControl, _imageZOrder);
        }

    }
在应用程序栏中

    private void appBarFront_Click(object sender, EventArgs e)
    {
        currentCharObject.ImageZOrder += 1;
    }
我希望看到选定的图像会立即显示在其他图像控件的前面。但是,上面的代码不起作用。很明显我错过了什么。是否必须使用新的z顺序值在画布上重新绘制图像控件

更新1

在XAML中,我有以下内容。每个图像都作为子图像添加到
cvsNote

    <Grid x:Name="GridCanvas" Grid.Row="0">
        <Canvas x:Name="cvsNote" />
    </Grid>

更新2
我只想补充一点,“图像控件”包含在一个特定的类中,它只是类的许多属性之一。

您可以更改画布中子图像的顺序

<Canvas>
    <Image Name="a"/> 
    <Image Name="b"/> 
    <Image Name="c"/> 
</Canvas>

改变顺序

<Canvas>
    <Image Name="c"/> 
    <Image Name="a"/> 
    <Image Name="b"/> 
</Canvas>

将更改z顺序

如果要在代码中完成此操作,例如:

List<Image> AllImages= new List<Image>();
...
Canvas.Children.Remove(img1); //This will remove img1, 
Canvas.Children.Add(img1);    //This will add img1 to the tail.
List AllImages=new List();
...
Canvas.Children.Remove(img1)//这将删除img1,
Canvas.Children.Add(img1)//这将为尾部添加img1。

您可以在代码中更改ZIndex

假设这个xaml:

<Canvas Grid.Row="1" Tap="gridTapped">
    <Image x:Name="ImgA" Source="Assets/A.png" />
    <Image x:Name="ImgB" Source="Assets/B.png" />
    <Image x:Name="ImgC" Source="Assets/C.png" />
</Canvas>

你真的把你的图像放在
画布上了吗?或者它们在
网格上
?我问这个问题的原因是因为这个问题的答案表明,如果您将它们放在
网格中,以确保它们在同一行/列中:我将
画布放置在主
网格中。查看更新的代码。如果您没有
Canvas.SetZIndex
而是
this.SetValue(Canvas.zindex属性,_imageZOrder)
,那么他必须删除所有图像,对它们重新排序,然后将它们全部重新添加到
Canvas
以更新一个图像的Z索引会怎么样?不,您可以交换顺序,无需重新创建图像。我希望用户能够在应用程序运行时根据自己的喜好更改任何图像
z顺序
。当用户单击特定图像时,您可以这样做,将此图像放在尾部,并在最顶部渲染。啊-如果即时重新排序很简单,这可能是一个解决方案,虽然我不知道为什么OP设置z指数的方法不起作用。谢谢你的建议。只需稍加修改,我就将代码放在页面上,而不是放在类中,这样就可以工作了。
private int TopZindex = 10;

private void gridTapped(object sender, GestureEventArgs e)
{
    var rand = new Random();
    switch (rand.Next(0, 3))
    {
        case 0:
            Canvas.SetZIndex(this.ImgA, ++TopZindex);
            break;
        case 1:
            Canvas.SetZIndex(this.ImgB, ++TopZindex);
            break;
        case 2:
            Canvas.SetZIndex(this.ImgC, ++TopZindex);
            break;
    }
}