Я разрабатываю Custom Control, где мне нужно сделать снимок в фоновом режиме. в то время как пользователь меняет размер окна, мне нужно остановить рендеринг и запустить его, когда пользователь будет готов.
на самом деле, что мне нужно - это событие OnBeforeParentSizeChanging и OnAfterParentSizeChanged или что-то вроде этого.
есть идеи?
Я подключался к событиям 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
управления.