wpf调整大小完成

Joe*_*tti 14 .net wpf resize

所以我需要在程序上为网格生成背景图像,它只需要.1秒.

所以我可以连接到SizeChanged事件,但是当你调整图表大小时,它会每秒触发甚至30次,所以resize事件显着滞后.

有没有人知道一个很好的方法来连接调整大小事件和测试天气使用完成大小调整,我尝试只是检查鼠标上/下状态,但当调整大小事件触发鼠标几乎总是下降.

Avi*_* P. 23

在调整大小时,你可以启动一个短暂的计时器(比如100毫秒),在每次调整大小时重置该计时器以防止它流逝.当最后一次调整大小时,计时器将会过去,然后您可以绘制背景图像.

例:

Timer resizeTimer = new Timer(100) { Enabled = false };

public Window1()
{
    InitializeComponent();
    resizeTimer.Elapsed += new ElapsedEventHandler(ResizingDone);
}

void ResizingDone(object sender, ElapsedEventArgs e)
{
    resizeTimer.Stop();
    GenerateImage();
}

private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
    resizeTimer.Stop();
    resizeTimer.Start();
}
Run Code Online (Sandbox Code Playgroud)


mca*_*mca 5

这是干净的解决方案:

private const int WmExitSizeMove = 0x232;

private void OnLoaded(object sender, RoutedEventArgs args)
{
    var helper = new WindowInteropHelper(this);
    if (helper.Handle != null)
    {
        var source = HwndSource.FromHwnd(helper.Handle);
        if (source != null)
            source.AddHook(HwndMessageHook);
    }
}

private IntPtr HwndMessageHook(IntPtr wnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    switch (msg)
    {
        case WmExitSizeMove:
            // DO SOMETHING HERE
            handled = true;
            break;
    }
    return IntPtr.Zero;
}
Run Code Online (Sandbox Code Playgroud)

祝好运!