0

ポップアップウィジェットをマップの一番上に表示しようとしていますが、Canvas.ZOrderを設定しても効果がありません。

XAMLは次のとおりです。

<m:Map x:Name="MainMap"
            Margin="0,6,3,3"
            ZoomLevel="{Binding MapZoomLevel, Mode=TwoWay}"
            Center="{Binding MapCenter, Mode=TwoWay}"
            CopyrightVisibility="Collapsed"
            CredentialsProvider="{Binding BingCredentialsProvider}"
            UseInertia="True" 
            Mode="Road" Grid.Column="2" Grid.Row="1">
            <m:MapItemsControl ItemsSource="{Binding Source={StaticResource WorkLayerData}}">
                <m:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Canvas
                            m:MapLayer.Position="{Binding Location}">
                            <Button                                
                                Width="{Binding PushpinWidth}" Height="{Binding PushpinWidth}"
                                Margin="{Binding PushpinMargin}"
                                Style="{StaticResource LooklessButtonStyle}"
                                Command="{Binding DataContext.SelectedPushpinChangedCommand, ElementName=LayoutRoot}"
                                CommandParameter="{Binding}"
                                Cursor="Hand">
                                <Ellipse
                                    Width="{Binding PushpinWidth}" Height="{Binding PushpinWidth}" Stroke="Black" Fill="{Binding IsGPSDataRecent, Converter={StaticResource BoolToGreenRedBrushConverter}}" StrokeThickness="1">
                                    <ToolTipService.ToolTip>
                                        <TextBlock Text="{Binding DeviceId}" />
                                    </ToolTipService.ToolTip>
                                </Ellipse>
                            </Button>

                            <!-- Show black dot over actual GPS point -->
                            <Ellipse
                                Width="10" Height="10" Stroke="Black" Fill="Black" StrokeThickness="1"
                                Margin="-5,-5,0,0"
                                Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisibilityConverter}}" />

                            <Border
                                Width="200"
                                BorderThickness="1" BorderBrush="DarkGray"
                                Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisibilityConverter}}">
                                <Border.Effect>
                                    <DropShadowEffect BlurRadius="5"  Color="#FF000000" Opacity="0.5" ShadowDepth="2" />
                                </Border.Effect>
                                <ContentControl Template="{StaticResource TrackedAssetControlTemplate}" />
                            </Border>
                        </Canvas>                                               
                    </DataTemplate>
                </m:MapItemsControl.ItemTemplate>
            </m:MapItemsControl>
        </m:Map>

境界線にZIndexを設定しようとしましたが、うまくいきませんでした。IsSelected = trueの場合の外観は次のとおりです(ZIndexが上にある他のドットを参照)

ここに画像の説明を入力してください

4

1 に答える 1

1

MapItemsControl 内の項目を前面に移動するには、項目コンテナーの ZIndex を設定する必要があります。MapItemsControl のItemContainerGeneratorからアイテム コンテナを取得することにより、コード ビハインドでこれを行うことができます。

それが望ましくない場合は、添付されたヘルパー プロパティをマップ アイテムの DataTemplate の最上位コンテナー (キャンバス) に適用できます。この Canvas は項目コンテナーの直接の子であるため、ヘルパー プロパティは Canvas の視覚的な親の ZIndex を設定する必要があります。奇妙に聞こえるかもしれませんが、MapItem というヘルパー クラスの添付プロパティのコードを次に示します。

public class MapItem
{
    public static readonly DependencyProperty ZIndexProperty =
        DependencyProperty.RegisterAttached("ZIndex", typeof(int),
            typeof(MapItem), new PropertyMetadata(ZIndexChanged));

    public static int GetZIndex(DependencyObject obj)
    {
        return (int)obj.GetValue(ZIndexProperty);
    }

    public static void SetZIndex(DependencyObject obj, int value)
    {
        obj.SetValue(ZIndexProperty, value);
    }

    private static void ZIndexChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        // set ZIndex on parent of obj
        Canvas.SetZIndex((UIElement)VisualTreeHelper.GetParent(obj), (int)e.NewValue);
    }
}

DataTemplate で、おそらく適切なバインディング コンバーターを使用して、ヘルパー プロパティを VM プロパティの 1 つにバインドできます。

<DataTemplate x:Key="MapItemDataTemplate">
    <!-- setting the helper property MapItem.ZIndex on Canvas
         sets the Canvas.ZIndex property on the item container -->
    <Canvas local:MapItem.ZIndex="{Binding ...}">
        ...
    </Canvas>
</DataTemplate>
于 2013-03-18T18:43:10.607 に答える