使用Z-Index控件 - 如何带到前面或后面

时间:2017-07-01 20:38:59

标签: c# wpf canvas listbox

在你告诉我这个问题已经回答之前,请允许我解释一下。我已经阅读了很多关于此的答案,但没有一个(我已经读过)解决了我的问题。

我的项目是一个WPF项目,它在Visual Studio 2010中使用C#,XAML和MVVM Light。

我拥有的是ListBox。 ListBox的每个元素都是一个画布(而不是默认的StackPanel)。每个画布都包含一个节点' - 基本上是一个附加了样式的Thumb控件和一个Path控件。 Path在视图模型中的节点列表上使用MultiBinding来生成节点之间的某些行。当您拖动一个节点(使用DragDelta)时,线条会更新。

视觉效果可能有所帮助:

enter image description here

如您所见,有些线在节点之上,有些在下面。通常情况下,来自节点的行似乎低于该节点,但我想要的是所有行都在所有节点之下。

我认为ListBox的ItemTemplate是主要内容:

<ListBox.ItemTemplate>
            <DataTemplate>
                    <Canvas>
                        <Path Stroke="Black" Canvas.ZIndex="1">
                            <Path.Data>
                                <MultiBinding Converter="{StaticResource NodeToPathDataConverter}">
                                    <Binding Path="NodeListViewModel.NodeList" Source="{StaticResource Locator}" />
                                    <Binding />
                                </MultiBinding>
                            </Path.Data>
                        </Path>
                        <Thumb Name="myThumb" Template="{StaticResource NodeVisualTemplate}" Canvas.ZIndex="2">

                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="DragDelta">
                                        <cmd:EventToCommand Command="{Binding NodeListViewModel.DragDeltaCommand, Source={StaticResource Locator}}" PassEventArgsToCommand="True"/>
                                </i:EventTrigger>

                            </i:Interaction.Triggers>
                        </Thumb>
                    </Canvas>

                </DataTemplate>
        </ListBox.ItemTemplate>

正如您所看到的,我尝试在控件中使用Canvas.ZIndex,但这似乎只是将z序设置为彼此,与其他节点无关和/或线。

有没有办法告诉我们将所有节点放在所有路径之上?感谢。

0 个答案:

没有答案