Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 相邻画布上一个画布的ZIndex_Wpf_Xaml - Fatal编程技术网

Wpf 相邻画布上一个画布的ZIndex

Wpf 相邻画布上一个画布的ZIndex,wpf,xaml,Wpf,Xaml,我尝试渲染一行相互关联的箭头,如下所示: 每个箭头表示工作流中的一个步骤,每个箭头的颜色由其步骤在工作流中的位置决定。虽然上面的示例有3种颜色(before、current、after),但到目前为止,我只实现了2种颜色(before/current、after),就本问题而言,这很好。我有一个IMultiValueConverter来处理这些颜色 工作流步骤表示为一个StepStruct,它具有一个Step属性(手动设置,稍后详细介绍),以及一个VmFunc属性,返回该步骤的视图模型。我当前

我尝试渲染一行相互关联的箭头,如下所示:

每个箭头表示工作流中的一个步骤,每个箭头的颜色由其步骤在工作流中的位置决定。虽然上面的示例有3种颜色(before、current、after),但到目前为止,我只实现了2种颜色(before/current、after),就本问题而言,这很好。我有一个
IMultiValueConverter
来处理这些颜色

工作流步骤表示为一个
StepStruct
,它具有一个
Step
属性(手动设置,稍后详细介绍),以及一个
VmFunc
属性,返回该步骤的视图模型。我当前的
IMultiValueConverter
使用步骤列表中的步骤索引,而不是实际的
step

我的问题是箭。最初,我将每个步骤作为画布渲染一个简单的矩形,这很容易实现。但为了制作箭头,我使用了一条
多段线
,我想将其放置在画布的右侧,实际上是从一个画布的右侧开始,然后溢出到下一个画布

我无法让
面板.ZIndex
以这样的方式工作,即画布的箭头可以看到溢出到其右侧邻居

我的代码粘贴在下面。值得注意的是:

  • 我已经将
    多段线
    面板.Zindex
    (我读过它会影响其父画布的z索引)绑定到
    StepStruct
    步骤
    属性,并且我已经设置了
    步骤
    的值,以便每个步骤的值都小于其左侧步骤的值,应该在右台阶上显示左台阶
  • 我已经注释了设置每个
    多段线的
    Canvas.Left
    属性的一行。当我取消注释这一行(并将其移动到位)时,
    多段线确实会移到画布的右侧,但它是不可见的,我认为这是因为它隐藏在画布的右侧。(我已经通过将
    多段线
    更改为以负x值开始来确认这一点,以便您可以看到未被相邻画布阻挡的部分。图中未显示该部分。)
  • 我将每个画布的
    步骤
    渲染为文本,而那些
    文本块
    都有相同的z索引(40),因此它们位于一些
    多段线
    的前面和后面,这表明
    多段线
    确实设置了正确的z索引,至少在其自己的画布内

真的
结果(画布左侧的
仍有注释)

如何根据需要在一个画布的末端和下一个画布的顶部渲染箭头?

(我当然可以保持这种方式并使其工作,但绑定将非常烦人和复杂,需要将每个箭头绑定到上一张画布的颜色;或者更确切地说,需要进行某种转换,包括
IndexOf-1

对于ZIndex:

每个项目都由ContentPresenter包装,这是由此ItemsControl实例中的ItemContainerGenerator完成的

因此,您需要编辑容器以获得新的ZIndex(例如通过ContentPresenter样式和绑定)


对于形状:

我建议使用带有预定义形状几何体的路径控件,如:

“M0,0L30,0L34,5L30,10L0,10Z”

并且在末尾有一个负的边距,如ZIndex的margin=“0,0,-4,0”

每个项目都由ContentPresenter包装,这是由此ItemsControl实例中的ItemContainerGenerator完成的

因此,您需要编辑容器以获得新的ZIndex(例如通过ContentPresenter样式和绑定)


对于形状:

我建议使用带有预定义形状几何体的路径控件,如:

“M0,0L30,0L34,5L30,10L0,10Z”


最后有一个负的边距,如margin=“0,0,-4,0”

谢谢。在负利润率上打得不错,我没想到。你能发布一个你提到的编辑容器的例子吗?在一个例子中编辑。谢谢,z-index解决方案非常有效!我仍然在使用以前的多段线。为什么您更喜欢您建议的路径/边距解决方案?这只是一种保持一个连贯的形状控制的方法,而不是一对的组合。并不是说这不好,只是如果你想在填充/笔划时把它们涂成相同的颜色,或者用它们做些什么,就更容易了。谢谢。在负利润率上打得不错,我没想到。你能发布一个你提到的编辑容器的例子吗?在一个例子中编辑。谢谢,z-index解决方案非常有效!我仍然在使用以前的多段线。为什么您更喜欢您建议的路径/边距解决方案?这只是一种保持一个连贯的形状控制的方法,而不是一对的组合。并不是说这不好,只是如果你想在填充/笔划时把它们涂成相同的颜色,或者用它们做些什么,就更容易了。
<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="Panel.ZIndex" Value="{Binding XXX}" />
    </Style>
</ItemsControl.ItemContainerStyle>