最大化窗口时,屏幕的
Width
属性似乎没有更新为完全最大化的宽度。如果我调整它的大小,一切都会正常,但最大化时就不行了。
我的代码如下:
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
UpdateColumns();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
UpdateColumns();
}
private void UpdateColumns()
{
ColumnCount = Math.Round(Width/150);
statusBarItemColumnCount.Content = ColumnCount;
button1.Content = ColumnCount + " " + Width;
}
private void Window_StateChanged(object sender, EventArgs e)
{
UpdateColumns();
}
看看
ActualWidth
,而不是Width
。
尝试使用
ActualWidth
而不是 Width
,这应该可以解决问题
将其放在任何需要宽度和高度的代码的顶部:
var RealWidth = Math.Max(宽度,实际宽度);
var RealHeight = Math.Max(宽度,实际高度);
然后使用 RealWidth 和 RealHeight 变量,因为它们总是正确的。
在构造期间和显示 ActualWidth 和 ActualHeight 之前将为零,因此将使用 Width 和 Height。
最大化后宽度和高度仍然是最大化前的值,但将使用实际宽度和实际高度,因为它们更大。
如果您遵循了所有这些并且想要一个优雅的解决方案,请创建两个属性。
private double RealWidth
{
get { return Math.Max(Width, ActualWidth); }
}
private double RealHeight
{
get { return Math.Max(Height, ActualHeight); }
}
然后您就可以在所有情况下使用 RealWidth 和 RealHeight。 如果您在类外需要这些属性,请将属性设置为内部或公共。
祝大家编程愉快!!!!