3

基本的に次のように設定されたビューがあります。

<Grid>
<ViewBox>
    <Grid>
        <ItemsControl ItemsSource="{Binding MyItems}"
                      ItemTemplate="{Binding Source={StaticResource MyItemsDataTemplate}}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Grid>
</ViewBox>
</Grid>

ここで使用されるDataTemplateは、次のように減らすことができます。

<DataTemplate x:Key="AreaItemDisplayDataTemplate">
<Canvas Grid.ZIndex={Binding Z}>
    <Grid>
        // an shape is displayed here...
    </Grid>
</Canvas>

これで、ZIndexが個々のアイテムのZプロパティにバインドされることが期待されます。コードをデバッグすると、Zプロパティゲッターが期待どおりにアクセスされることもわかります(たとえば、propertychangedイベントを発生させるたびに)。したがって、バインディングが正しく機能すると想定します。

ただし、ZIndexは期待どおりに機能していません。値へのバインドは、実際に表示されるZオーダーには影響しません。このコードのどこが間違っているのですか?

4

1 に答える 1

10

のコンテンツはDataTemplateにラップされているContentPresenterため、CanvasDataTemplateはの直接の子ではありませんItemsPanel GridZIndexこれが、プロパティが何もしない理由です。

に移動するZIndex Bindingと、ItemContainerStyle機能するはずです。

<ItemsControl ItemsSource="{Binding MyItems}" 
              ItemTemplate="{Binding Source={StaticResource MyItemsDataTemplate}}"> 
    <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
            <Grid /> 
        </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Grid.ZIndex" Value="{Binding Z}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl> 
于 2012-06-29T15:08:09.803 に答える