WPF OnBeforeParentSizeChanging OnAfterParentSizeChanged

1

Я разрабатываю Custom Control, где мне нужно сделать снимок в фоновом режиме. в то время как пользователь меняет размер окна, мне нужно остановить рендеринг и запустить его, когда пользователь будет готов.

на самом деле, что мне нужно - это событие OnBeforeParentSizeChanging и OnAfterParentSizeChanged или что-то вроде этого.

есть идеи?

Теги:
wpf
events
controls

1 ответ

0
Лучший ответ

Я подключался к событиям Win32 WndProc WM_ENTERSIZEMOVE и WM_EXITSIZEMOVE:

public class ResizeWindow : Window
{
    public ResizeWindow()
    {
        this.Loaded += ResizeWindow_Loaded;
    }

    void ResizeWindow_Loaded(object sender, RoutedEventArgs e)
    {
        HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
        source.AddHook(new HwndSourceHook(WndProc));
    }

    public event EventHandler Resizing;
    public event EventHandler Resized;

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        const int WM_ENTERSIZEMOVE = 0x0231;
        const int WM_EXITSIZEMOVE = 0x0232;

        if (msg == WM_ENTERSIZEMOVE)
        {
            if(Resizing != null)
            {
                Resizing(this, EventArgs.Empty);
            }
        }
        else if (msg == WM_EXITSIZEMOVE)
        {
            if (Resized != null)
            {
                Resized(this, EventArgs.Empty);
            }
        }

        return IntPtr.Zero;
    }
}

}

Вот как вы собираетесь использовать его:

public partial class MainWindow : ResizeWindow
{
    public MainWindow()
    {
        this.Resized += MainWindow_Resized;
        this.Resizing += MainWindow_Resizing;

        InitializeComponent();
    }

    void MainWindow_Resizing(object sender, EventArgs e)
    {
        MessageBox.Show("Resizing!");
    }

    void MainWindow_Resized(object sender, EventArgs e)
    {
        MessageBox.Show("Resized!");
    }
}

В вашем конкретном случае вам сначала нужно будет изменить базовый класс в родительском окне и выставить изменение Resizing и изменить Resizing Resized управления.

  • 0
    так как это элемент управления, я не хотел бы заставлять пользователя вносить изменения в его основное окно, чтобы поддерживать сам элемент управления .... но это выглядит как отличное решение!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню