【发布时间】:2015-04-06 08:59:51
【问题描述】:
根据some folks,实际宽度是使用ActualWidth属性获得的,如下例所示。这是有道理的,但我似乎遇到了矛盾的行为。
<Canvas Width="{Binding ActualWidth,ElementName=Expy}">
<Expander x:Name="Expy"
HorizontalAlignment="Left"
Margin="0,0,0,0"
VerticalAlignment="Top" ...>
...
</Expander>
</Canvas>
在上面的设置中,行为与预期一致,尽管紧密挤压在一起,但包含画布的面板中的下一个元素不会与其前一个元素重叠。
但是,如果我将边距改宽一点,我可以清楚地看到画布侵入了下一个元素,估计与我在边距属性中请求的相同数量的小精灵。所以看起来 ActualWidth 不是 actual 宽度,而是没有边距的宽度。
- 我是否在这里混淆了某些东西,如果有,是什么?
- 如何获取并绑定到实际实际的渲染宽度?
【问题讨论】:
-
使用合适的布局面板,例如Grid 而不是 Canvas,并移除 Width 绑定。
-
我同意克莱门斯的观点。我倾向于使用使用 RowDefinitions 和 ColumnDefinitions 的网格布局。大多数时候我不会在任何东西上设置宽度,而只是允许它相对于窗口调整大小。
-
好吧,在我看来,只有边距不是元素宽度/高度的一部分才有意义。这就是它们与填充物的区别。
-
@Clemens 根据 OP 试图实现的目标,在这种情况下使用
Canvas没有任何问题(请参阅 this SO question)。 -
@MikeEason 还有其他一些限制我使用画布/扩展器的考虑。当然,如果需要,这可能会改变,所以我欢迎这个建议。但是,对于问题的第二部分,我仍然很好奇 - 如果需要在遵守边距设置的同时绑定到宽度,该怎么办?
标签: c# wpf xaml layout data-binding