需要在应用所有绑定之后但在渲染之前引发Window事件

时间:2012-09-17 15:19:09

标签: wpf window

有时候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?

2 个答案:

答案 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。在加载事件之前已知高度和宽度。