我有下面的代码
<Window x:Class="Netspot.DigitalSignage.Client.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" WindowStyle="SingleBorderWindow"
WindowStartupLocation="CenterScreen"
WindowState="Normal" Closing="Window_Closing">
任何获取高度/宽度的尝试都将返回NaN或0.0
谁能告诉我怎么弄到它?
这两种方法都不行
//Method1
var h = ((System.Windows.Controls.Panel)Application.Current.MainWindow.Content).ActualHeight;
var w = ((System.Windows.Controls.Panel)Application.Current.MainWindow.Content).ActualWidth;
//Method2
double dWidth = -1;
double dHeight = -1;
FrameworkElement pnlClient = this.Content as FrameworkElement;
if (pnlClient != null)
{
dWidth = pnlClient.ActualWidth;
dHeight = pnlClient.ActualWidth;
}
应用程序将不会全屏运行。
9条答案
按热度按时间c2e8gylq1#
1.)订阅后面代码中的窗口重新调整大小事件:
2.)使用SizeChangedEventArgs对象'e'获取所需的大小:
请记住,这是非常普遍的情况,您可能(您也可能不)必须做一些检查,以确保您的大小值为0。
我用它来动态地调整列表框的大小,因为主窗口改变了,基本上我想要的是这个控件的高度和窗口的高度改变相同的量,这样它的父“panel”在任何窗口的改变中看起来都是一致的。
下面是更具体的代码示例:
下面是OnWindowSizeChanged事件处理程序:
koaltpgm2#
你可以在
InitializeComponent
运行后在构造函数中得到窗口的宽度和高度,它们不会返回NaN
,实际的高度和宽度必须等到窗口显示出来。当
WindowState == Normal
时,您可以在IntializeComponent()
之后从Width / Height
开始执行此操作。当
WindowState == Maximized
你可以得到这个屏幕的分辨率x8diyxa73#
在UI中加载窗口后,您必须尝试获取
ActualWidth/ActualHeight
值。在Window_Loaded中执行此操作效果很好。thtygnil4#
XAML语言
CS初始化组件()之后的主窗口();
pdkcd3nj5#
WPF以一种延迟的方式创建控件和窗口。因此,直到窗口第一次显示,它可能还没有经过布局,因此没有
ActualWidth
/ActualHeight
。您可以等到窗口加载后再获取属性,或者更好地将这些属性绑定到您需要它们的目标。您也可以通过UpdateLayout()
强制布局。只想补充一句:尽量减少依赖于大小的逻辑,几乎总是可以避免的。2当然,除非你正在写一个布局面板。
vawmfj5a6#
请注意,当您使用具有100%的with的控件时,在表示它们之前,它们的大小为NaN
你可以在Loaded事件被触发时检查ActualHeigh或ActualWidth,但是在创建窗口控件之前不要尝试验证它,忘记在构造函数中控制它的想法吧。
在我看来,控制这类事情的最佳位置是SizeChanged事件
ldioqlga7#
你好,你可以得到WPF中当前屏幕的高度
htrmnn0y8#
我只需要给窗口添加一个变量名,然后从它的width或height属性中分别得到我想要的窗口的宽度或高度。
XAML:
C编号:
或:
ogsagwnx9#
我的解决方案是MVVM...
我有一个
ViewModelBase
,它是应用程序所有ViewModel的基类。1.)我在
ViewModelBase
中创建了一个虚方法,它可以在子ViewModel中重写。2.)
MainWindow : Window
类的ctr3.)例如,在
MainViewModel
中,它扩展了ViewModelBase