不好意思问这一个,因为我发现很多类似的问题,但不知何故已经为他们工作的解决方案似乎并不适用于此......ActualWidth的/的ActualHeight
我有生成路径的一些自定义控件(一些是静态的,一些绑定到更新的值)。
我在单个itemcontrol上显示这些(使用画布作为itemspaneltemplate),并且我需要获取各个项目的Y位置。 XAML为如下所示的项目中的一个:
<Style TargetType="{x:Type pg:GraphVertexBelt}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type pg:GraphVertexBelt}">
<Border Background="Transparent">
<StackPanel>
<Canvas Width="225" Height="20">
<Ellipse Height="10" Width="10" Canvas.Left="10"/>
<Ellipse Height="10" Width="10" Canvas.Left="220"/>
<Line X1="15" Y1="0.5" X2="225" Y2="0.5"/>
</Canvas>
<Label Content="{Binding Item.Tag.Title}" HorizontalAlignment="Center"/>
</StackPanel>
</Border>
</ControlTemplate>
</Setter>
</Setter>
时遇到的问题是,的ActualHeight/ActualWidth的总是显示为零。
我试着:
- 施加控制内的恒定定义的宽度和高度在画布(这是不方便的,因为它需要手动调整的每个控制)
使用委托给在渲染之后识别所述宽度:
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Render, new Action(() => { Console.Write(Items[0].Item.ActualWidth); }));
的原因我需要这样做的是,控件中元素的宽度和高度实际上是动态的,我需要能够在相对于实际控件位置的适当位置注释图表。
任何帮助将不胜感激!
干杯。
编辑
也许我需要更清楚地解释一下这个意图是否有意义。我有一个可缩放的画布,其中显示了一组控件。每个控件都需要放在画布中,我需要知道画布上这些控件的高度和宽度。
在每个控件中有一系列路径(按照示例代码),这些路径都相对于彼此定位,所以我在控件中嵌入了一个画布。控制器还具有标签,上下文菜单等
如果没有解决这个另一种更清洁的方式,然后我所有的耳朵:)
覆盖帆布的“测量和排列”如何?我认为,这是最直接的方法。 – tgpdyk
@tgpdyk - 你的意思是测量/安排“GraphVertexBelt”?不确定画布包装是否会有所帮助,因为它包含一组类似的控件。我将研究是否可以重写单个控件的这些函数,并查看它们的外观。 – Squanchy
我的意思是你的ItemsPanelTemplate是一个自定义画布。我会发布一个答案。 – tgpdyk