将 ActualWidth 和 ActualHeight 传递到多重绑定中



我有一个WPF项目(c#,使用MVVM Light的MVVM),我有一个MultiBinding,它将信息传递给转换器,正如你所期望的那样。

代码在这里:

<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Path Stroke = "{Binding LineColour}" >
< Path.Data >
< MultiBinding Converter="{StaticResource NodeToPathDataConverter}">
<Binding Path = "NodeListViewModel.NodeList" Source="{StaticResource Locator}" />
<Binding />
</MultiBinding>
</Path.Data>
</Path>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>

然后,转换器使用这些绑定中的信息来吐出该行的详细信息。问题是该行从一个控件的 (0,0) 位置转到另一个控件,但我希望它从相关控件的中间开始。为此,多重绑定中的转换器需要获取相关控件的实际宽度和实际高度。

那么有问题的控件是什么?我在这个控件下面还有另一个几乎相同的 ListBox 控件,它使用相同的数据集,但它不是在控件之间画线,而是绘制控件本身。具体如下:

<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Thumb Name = "myThumb" Template="{StaticResource NodeVisualTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName = "DragDelta" >
< cmd:EventToCommand Command = "{Binding NodeListViewModel.DragDeltaCommand, Source={StaticResource Locator}}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Thumb>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>

我使用两个 ListBox 控件的原因是为了确保所有行都低于所有 Thumb。我在同一个列表框中尝试了许多方法,但这不会发生。不过,它们确实共享相同的数据集,即"NodeList"。

所以我无法弄清楚的一点是如何将第二个列表框中拇指的实际宽度和实际高度放入第一个列表框中的转换器中。这就是我在这里的原因。

任何帮助将不胜感激。

可以使用此处提到的任何解决方法,将第二个ListViewThumbActualWidthActualHeight只读属性"绑定"到数据对象的某些double源属性:

绑定到项目项的实际高度控件

然后,可以在第一个ListViewItemTemplate绑定到相同的源属性。如果两个ListViews绑定到同一个源集合,这应该有效。

但是,使用纯 XAML 无法直接绑定到第二个ListView中的实际Thumb元素。

最新更新