繁体   English   中英

C#WPF-自定义大小调整

[英]C# WPF - custom resizing

我需要使用WindowStyle.None,AllowsTransparency = true等创建自定义窗口。

一个要求是自定义ResizeGrip控件。

我使用ResizeMode.CanResizeWithGrip进行此工作,并从此处的开源项目中获取了一些代码: Fluid Kit

如果您有兴趣,请参阅“ GlassWindow”类。

为此,我在ResizeGrip的MouseLeftButtonDown事件上调用以下代码:

NativeMethods.SendMessage(_interopHelper.Handle, WM.SYSCOMMAND, (IntPtr)((int)SC.SIZE + (int)sizingAction), IntPtr.Zero);

SizingAction定义为:

    enum SizingAction
    {
        West = 1,
        East = 2,
        North = 3,
        NorthWest = 4,
        NorthEast = 5,
        South = 6,
        SouthWest = 7,
        SouthEast = 8,
    }

一切正常,但是当您通过西南(或任何左侧或顶部)调整大小时,我发现有些奇怪。 您可以看到WPF窗口重新绘制了尺寸和位置的变化(从顶部或左侧调整大小时总是发生这种情况)。

如果您在具有默认窗口样式和调整大小模式的任何窗口上尝试此操作,则效果很好。 除XP外,您必须启用经典主题。

有谁知道使用此方法的替代方法? 还是解决它的方法?

我还在MSDN论坛上发布了一些信息,在这里: MSDN论坛

PS-如果有人要svn检出Fluid Kit并通过在示例项目中设置StartupUri =“ GlassWindow / Window1.xaml”来运行GlassWindow示例,则可以直接看到此行为。

编辑:微软告诉我要发送产品建议...

如果有人有类似问题,请点击这里。

产品建议

如果您想直接尝试,我还会在此处举一个示例:

样品

Microsoft报告所有WPF窗口都会发生这种情况。

标准样式之所以起作用,是因为窗口会渲染标题栏,窗口边框等。调整标准边框窗口的大小时,您可以在任何计算机上看到WPF客户区闪烁。

如果将WindowStyle设置为None,则WPF会渲染整个窗口,因此由于整个窗口闪烁,这种闪烁变得更加明显。

目前,解决方法是使窗口固定大小并调整客户区大小。 但是,这是相当耗费性能的-因此您可能会更好地忍受闪烁。

您可以点击上面的链接到我的产品建议,以查看Microsoft是否打算解决此问题。 如果您有类似的问题,请投票。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM