Окна WPF без возможности изменения размера с окном с WindowStyle= Нет
По сути, мне нужно окно, похожее на следующее изображение: http://screenshots.thex9.net/2010-05-31_2132.png
(НЕ изменяет размер, но сохраняет стеклянную рамку)
Мне удалось заставить его работать с Windows Forms, но мне нужно использовать WPF. Чтобы заставить его работать в Windows Forms, я использовал следующий код:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x84 /* WM_NCHITTEST */)
{
m.Result = (IntPtr)1;
return;
}
base.WndProc(ref m);
}
Это именно то, что я хочу, но я не могу найти WPF-эквивалент. Самое близкое, что мне удалось получить с WPF, заставило Window игнорировать любой ввод мыши.
Любая помощь будет принята с благодарностью:)
2 ответа
Вам нужно добавить ловушку для цикла сообщений:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var interopHelper = new WindowInteropHelper(this);
var hwndSource = HwndSource.FromHwnd(interopHelper.Handle);
hwndSource.AddHook(WndProcHook);
}
private IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x84 /* WM_NCHITTEST */)
{
handled = true;
return (IntPtr)1;
}
}
Очень простое решение состоит в том, чтобы установить минимальный и максимальный размер каждого окна равными друг другу и фиксированный номер в конструкторе окон. именно так:
public MainWindow()
{
InitializeComponent();
this.MinWidth = this.MaxWidth = 300;
this.MinHeight = this.MaxHeight = 300;
}
Таким образом, пользователь не может изменить ширину и высоту окна. Также вы должны установить свойство "WindowStyle=None", чтобы получить стеклянную границу.