Mik*_*icz 6 silverlight xaml f# silverlight-4.0
在调整画布的父级时,我遇到了一个奇怪的问题,它恰好是一个ChildWindow.
从高层次来看,这是我在用户点击按钮时尝试做的事情:
步骤1和2工作正常.问题出在第3步:当我单步执行F#/ Silverlight代码时,所有大小似乎都设置正确.问题是,ChildWindow获取屏幕上呈现为多比它确实应该更高.
看一下下面的例子:
member this.btnWhatever_Click(sender : obj) (args : RoutedEventArgs) =
let parentWindow = this.Parent :?> ChildWindow // get the canvas' parent, and cast it to a ChildWindow
// if the RowDefinition height is set to our standard, the hide it by setting it to 0
if this.aRowDefinition.Height.Value.Equals STANDARD_ROW_HEIGHT then
this.aRowDefinition.Height <- new GridLength(0.)
this.Height <- this.Height - HEDGE_ROW_HEIGHT
parentWindow.Height <- parentWindow.Height - STANDARD_ROW_HEIGHT
this.btnCreateOrRemoveHedge.Content <- "On"
// otherwise, unhide the RowDefinition by setting it to the standard height
else
this.aRowDefinition.Height <- new GridLength(STANDARD_ROW_HEIGHT)
this.Height <- this.Height + STANDARD_ROW_HEIGHT
parentWindow.Height <- parentWindow.Height + STANDARD_ROW_HEIGHT
this.btnWhatever.Content <- "Off"
()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的STANDARD_ROW_HEIGHT只有23像素,但在用户单击按钮后,标题栏下方的ChildWindow中还会添加一个92像素的空白空间.更重要的是,当用户再次单击该按钮(切换行可见性)时,该行消失,但窗口顶部的额外空间仍然存在.最初,这个空的空间不存在.看这个图片:

任何想法/帮助将不胜感激.谢谢!
我不是这方面的专家,但很多 WPF 渲染/调整大小都是自动发生的。我认为有一个两阶段模型,其中第一个组件被要求提供其首选的尺寸/约束,然后第二遍根据实际约束列出内容。对于许多组件,您不需要执行任何显式调整大小,因为它们将根据其子组件的大小自动调整大小。听起来一般来说您可能对尺寸进行了过于精细/低级的控制,并且应该让 WPF 为您做更多的工作。
要“隐藏”一行,我敢打赌切换.Visible属性可能比将其高度设置为零更好。
听起来好像您可能正在向父级添加显式高度,但不需要这样做,因为 WPF 已经要调整父级的大小,因为现在它包含更多可见内容。永远不要将父级高度设置为任何地方的任何东西,可能会解决这个问题。
(这些是来自不太了解情况的 WPF 用户的随机建议,祝你好运:))
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |