2

有时 WPF 会变成 WTF =)

来自 MSDN:

FrameworkElement.Loaded 事件 在元素布局、呈现并准备好交互时发生。

对象生命周期事件 Loaded 事件在最终渲染之前引发,但在布局系统计算出所有必要的渲染值之后。

应用所有绑定后,我需要在代码后面调整窗口屏幕位置。现在这是在 Loaded 事件处理程序中完成的。我看到窗户是如何跳动的,这不是很令人赏心悦目。

更新1

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 中实现的功能。 灵活的仅 XAML 布局。可能吗?

4

2 回答 2

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 在合成树中的对象被渲染之前发生。我希望这会有所帮助。

于 2012-10-11T15:06:46.700 回答
0

您可以使用来自 Window 中 hostet 的 UserControl 中的 DesiredSize.Height 和 DesiredSize.Width。高度和宽度在加载事件之前是已知的。

于 2015-01-07T11:00:13.997 回答