有时候WPF会变成WTF =)
来自MSDN:
FrameworkElement.Loaded event 在布置元素,呈现并准备好进行交互时发生。
Object lifetime events Loaded事件在最终渲染之前 >>,但在布局系统计算了所有必要的渲染值之后。
我需要在应用所有绑定后调整代码中的窗口屏幕。现在,这是在Loaded事件处理程序中完成的。我看到窗户是如何跳跃到眼睛不太舒服的。
UPDATE1
private void DialogViewLoaded(object sender, RoutedEventArgs e)
{
MaxHeight = SystemParameters.FullPrimaryScreenHeight * 0.8;
MaxWidth = SystemParameters.FullPrimaryScreenWidth * 0.8;
SizeToContent = SizeToContent.WidthAndHeight;
SizeToContent = SizeToContent.Manual;
MaxHeight = double.PositiveInfinity;
MaxWidth = double.PositiveInfinity;
WindowHelper.CenterWindowOnScreen(this);
}
此代码实现了我想在XAML中实现的功能。 Flexible XAML-only layout. Is it possible?
答案 0 :(得分:1)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CompositionTarget.Rendering += new EventHandler(OnRendering);
}
void OnRendering(object sender, EventArgs e)
{
MaxHeight = SystemParameters.FullPrimaryScreenHeight * 0.8;
MaxWidth = SystemParameters.FullPrimaryScreenWidth * 0.8;
SizeToContent = SizeToContent.WidthAndHeight;
SizeToContent = SizeToContent.Manual;
MaxHeight = double.PositiveInfinity;
MaxWidth = double.PositiveInfinity;
}
}
CompositionTarget.Rendering在渲染合成树中的对象之前发生。我希望这会有所帮助。
答案 1 :(得分:0)
您可以使用来自UserControl的DesiredSize.Height和DesiredSize.Width,它是Window中的hostet。在加载事件之前已知高度和宽度。