Wpf 相邻画布上一个画布的ZIndex
我尝试渲染一行相互关联的箭头,如下所示: 每个箭头表示工作流中的一个步骤,每个箭头的颜色由其步骤在工作流中的位置决定。虽然上面的示例有3种颜色(before、current、after),但到目前为止,我只实现了2种颜色(before/current、after),就本问题而言,这很好。我有一个Wpf 相邻画布上一个画布的ZIndex,wpf,xaml,Wpf,Xaml,我尝试渲染一行相互关联的箭头,如下所示: 每个箭头表示工作流中的一个步骤,每个箭头的颜色由其步骤在工作流中的位置决定。虽然上面的示例有3种颜色(before、current、after),但到目前为止,我只实现了2种颜色(before/current、after),就本问题而言,这很好。我有一个IMultiValueConverter来处理这些颜色 工作流步骤表示为一个StepStruct,它具有一个Step属性(手动设置,稍后详细介绍),以及一个VmFunc属性,返回该步骤的视图模型。我当前
IMultiValueConverter
来处理这些颜色
工作流步骤表示为一个StepStruct
,它具有一个Step
属性(手动设置,稍后详细介绍),以及一个VmFunc
属性,返回该步骤的视图模型。我当前的IMultiValueConverter
使用步骤列表中的步骤索引,而不是实际的step
值
我的问题是箭。最初,我将每个步骤作为画布渲染一个简单的矩形,这很容易实现。但为了制作箭头,我使用了一条多段线
,我想将其放置在画布的右侧,实际上是从一个画布的右侧开始,然后溢出到下一个画布
我无法让面板.ZIndex
以这样的方式工作,即画布的箭头可以看到溢出到其右侧邻居
我的代码粘贴在下面。值得注意的是:
- 我已经将
的多段线
(我读过它会影响其父画布的z索引)绑定到面板.Zindex
的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>