2

キャンバスと長方形が描かれているのに問題があります。それらは、zindexの順序ではなく、作成の逆の順序(最新のものが上)でイベントを取得しています...

ItemsControlをリソースのリストにバインドしました。

次に、アイテムパネルとしてキャンバスがあります。

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <Canvas x:Name="BitmapCanvas"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

すべてのリソースは長方形としてバインドされます。

<ItemsControl.ItemTemplate>
    <DataTemplate DataType="interfaces:IResourceView">
        <Rectangle ...>

そしてスタイルがあります:

<Rectangle.Style>
    <Style TargetType="{x:Type Rectangle}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
                <Setter Property="Canvas.ZIndex" Value="0"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
                <Setter Property="Canvas.ZIndex" Value="15"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    ...</Rectangle.Style></Rectangle></DataTemplate></ItemsControl.ItemTemplate>

ご覧のとおり、長方形を選択すると、そのZindexを0に設定し、他の人はzindex値を大きくします。値を入れ替えて試してみましたが、それでも同じように長方形に注目が集まっています。なぜそれがこのように起こっているのか誰かが知っていますか?

4

2 に答える 2

3

DataTemplateのRectangleに設定Canvas.ZIndex(または実際にはWPFのPanel.ZIndex)しても効果はありません。これは、これらのRectangleがItemsPanelTemplateのCanvasの直接の子ではないためです。つまり、長方形は兄弟ではありませんがZIndex、同じコンテナコントロールの兄弟にのみ影響する相対値です。

実際には、各長方形はContentPresenterのContent(ItemsControlのアイテムコンテナタイプ)に配置されます。次に、これらのContentPresentersがCanvasに配置されます。

動作させるには、DataTriggersをItemContainerStyleに移動します。

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
                <Setter Property="Panel.ZIndex" Value="0"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
                <Setter Property="Panel.ZIndex" Value="15"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ItemsControl.ItemContainerStyle>
于 2013-01-23T21:02:29.450 に答える
0

問題はトリガーにあります。スタイルはEventTriggerのみをサポートし、他のタイプはサポートしないため、トリガーは実行されません。ただし、DataTemplateを使用していて、それらはDataTriggerをサポートしているため、問題を修正するためにいくつかのことを移動できます。

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Rectangle x:Name="Rect"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
                <Setter TargetName="Rect" Property="Canvas.ZIndex" Value="0"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
                <Setter TargetName="Rect" Property="Canvas.ZIndex" Value="15"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</ItemsControl.ItemTemplate>
于 2013-01-23T21:45:27.097 に答える