我的主窗口Height
、Left
、Top
和Width
都通过样式绑定到它们各自的视图模型属性。我可以确认视图模型中的这四个属性仅分别设置为1920
, 1920
, 。118
1080
但是当我启动应用程序时,主窗口上的Top
和Width
属性设置为其他值(Width
将是1440
并且Top
将是通常小于的随机数300
)。什么会导致这个?
这是我在窥探应用程序时看到的内容。注意如何Top
和Width
来自Local
价值源:
奇怪的是,当我在 Snoop 中右键单击这些属性并告诉它“清除/重置”时,这些属性开始起作用。Snoop 正在做什么来解决这个问题?
其他事实:
Top
和viewmodel 属性的 getterWidth
只在主窗口初始化时调用一次。堆栈跟踪贯穿框架绑定初始化代码。Top
和viewmodel 属性的设置器Width
仅在 viewmodel 构造函数中调用一次,因为它将这些属性分别设置为118
和1080
。- 这四个属性的绑定都是双向的。
- 这些都不会导致视图的属性改变/正确:
- 在运行时更改关联的视图模型属性,即使在视图已完全加载之后也是如此。
- 调用
UpdateLayout()
视图。 - 调用
InvalidateArrange()
视图。 - 调用
InvalidateMeasure()
视图。 - 调用
InvalidateProperty(FrameworkElement.WidthProperty)
视图。 - 调用
InvalidateVisual()
视图。
- 我已经搜索和搜索,并且在任何地方都没有看到任何涉及视图
Top
或Width
属性的代码(样式绑定除外)。
这里的风格:
抱歉,我不得不删掉类型名称和其他一些东西——这是一个公司应用程序。Window
如果有帮助,则主窗口/视图位于其曾曾祖父的长继承线的末尾。我试图通过 MVVM-ing 使主窗口更易于重用——以前这些布局属性是在视图中的代码隐藏中设置的,并且视图具有构造函数参数:'(这与我需要键入样式的原因有关, 以及为什么样式基于其他东西。但是继承的类型都没有操纵布局属性。
PS 我看到其他人抱怨调整 WPF 的Window
. 最常见的建议解决方案是绑定MinWidth
和MaxWidth
以及Width
. 当我这样做时,Width
确实将其强制为我想要的值,但是您无法调整窗口大小,该Width
属性仍然具有其Local
值源,并且Top
仍然不正确。