在DataTemplate中设置Canvas.Zindex值

时间:2016-06-26 21:02:16

标签: c# xaml windows-phone-8 windows-phone-8.1

在我的WP 8.1应用程序中,我有MapControl:

private void myStack_Tapped(object sender, TappedRoutedEventArgs e)
    {
        StackPanel s = sender as StackPanel;
        Grid contentBox = s.FindName("contentGrid") as Grid;
        contentBox.Visibility = Visibility.Visible;
    }

在地图上我有标记,当我点击其中一个时,“contentGrid”会出现。该行为的代码:

signals:
#ifndef Q_MOC_RUN//this will be defined if moc runs, thus skipped
private:
#endif
    void mySignal_inherited(); ///< DO NOT USE EXPLICITLY

我希望“contentGrid”始终高于其他标记,但其中一些标记位于我的“contentGrid”之上。我尝试在“contentGrid”中设置XAML中的Canvas.Zindex属性,但它不起作用。

I attach screenshot to exemplify my problem.

1 个答案:

答案 0 :(得分:0)

StackPanel垂直(默认)或水平堆叠。

如果您希望StackPanel的子项位于“不同层”, 您最好使用StackPanelDataTemplate

替换Grid的{​​{1}}

一个简单的解决方案是

Canvas

在网格将图像置于图形之前,在XAML中写入图像。

最后,如果你添加其他控件添加到网格/画布,你可以使用ZIndex。

否则我不确定ZIndex是否真的有必要

修改

<DataTemplate> <Grid Tapped="myStack_Tapped" Maps:MapControl.Location="{Binding GeoPoint}" Maps:MapControl.NormalizedAnchorPoint="{Binding Anchor}"> <Image x:Name="myImage" Source="{Binding MapMarker}"/> <Grid x:Name="contentGrid" Background="White" Height="150" Width="220" Visibility="Collapsed"/> </Grid> </DataTemplate> 是Canvas的附加属性。

但令人惊讶的是它适用于网格!

Zindex越大,控制越接近你的眼睛(超过其他控件)

此致