wpf 窗口 OnSourceInitialized
时间: 2023-07-19 20:30:47 浏览: 196
在 WPF 中,`OnSourceInitialized` 方法是窗口生命周期中的一个重要事件。该事件在窗口句柄创建后,但在窗口显示之前触发。在这个事件中,你可以对窗口的 Win32 句柄进行一些操作,例如设置窗口样式、移动窗口、改变窗口大小等等。
以下是一个示例,演示如何在 `OnSourceInitialized` 方法中设置窗口的样式:
```
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
IntPtr handle = new WindowInteropHelper(this).Handle;
int style = GetWindowLong(handle, GWL_STYLE);
SetWindowLong(handle, GWL_STYLE, style & ~WS_MAXIMIZEBOX);
}
private const int GWL_STYLE = -16;
private const int WS_MAXIMIZEBOX = 0x10000;
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
}
```
在这个例子中,我们在 `OnSourceInitialized` 方法中获取了窗口的句柄,并使用 `GetWindowLong` 和 `SetWindowLong` 函数来修改窗口的样式。具体来说,我们禁用了窗口的最大化按钮,以避免用户最大化窗口。
需要注意的是,在 `OnSourceInitialized` 方法中修改窗口句柄可能会影响窗口的布局和渲染。因此,你应该谨慎使用该方法,并进行充分的测试。
阅读全文