크기 조정 가능한 창에서 버튼을 최소화하고 최대화하는 방법
WPF에는 크기를 조정할 수 있는 창은 없지만 최대 또는 최소 버튼은 없습니다.크기를 조정할 수 있는 대화 상자를 만들 수 있는 창을 만들고 싶습니다.
해결방법은 pinvoke를 사용하는 것을 의미한다는 것은 알지만 무엇을 어떻게 불러야 할지 잘 모르겠습니다.pinvoke.net을 검색해도 필요한 것은 아무것도 나오지 않았습니다.Windows Forms는 다음 기능을 제공하고 있기 때문에CanMinimize
그리고.CanMaximize
속성을 표시합니다.
이 방법을 알려주시거나 코드(C# 선호)를 제공해 주실 수 있습니까?
MSDN 포럼에서 찾은 코드를 훔쳐서 Window 클래스에서 다음과 같은 확장 메서드를 만들었습니다.
internal static class WindowExtensions
{
// from winuser.h
private const int GWL_STYLE = -16,
WS_MAXIMIZEBOX = 0x10000,
WS_MINIMIZEBOX = 0x20000;
[DllImport("user32.dll")]
extern private static int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
extern private static int SetWindowLong(IntPtr hwnd, int index, int value);
internal static void HideMinimizeAndMaximizeButtons(this Window window)
{
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(window).Handle;
var currentStyle = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, (currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX));
}
}
그 밖에 기억해야 할 것은 어떤 이유로든 윈도우의 컨스트럭터에서는 동작하지 않는다는 것입니다.나는 이것을 건설업자에게 던져줌으로써 그것을 피할 수 있었다.
this.SourceInitialized += (x, y) =>
{
this.HideMinimizeAndMaximizeButtons();
};
한 가지 방법으로는 다음 세팅하는 것입니다.ResizeMode="NoResize"
이렇게 동작합니다.
이게 당신의 요구에 맞는지 모르겠네요. 시각적으로..이것은
<Window x:Class="DataBinding.MyWindow" ...Title="MyWindow" Height="300" Width="300"
WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip">
Devexpress window(DXWindow)를 사용하는 사용자가 있으면 승인된 답변이 작동하지 않습니다.한 가지 추악한 접근법은
public partial class MyAwesomeWindow : DXWindow
{
public MyAwesomeWIndow()
{
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
// hides maximize button
Button button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_Maximize.ToString());
button.IsHitTestVisible = false;
button.Opacity = 0;
// hides minimize button
button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_Minimize.ToString());
button.IsHitTestVisible = false;
button.Opacity = 0;
// hides close button
button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_CloseButton.ToString());
button.IsHitTestVisible = false;
button.Opacity = 0;
}
}
여기 제가 사용하고 있는 솔루션이 있습니다.최대화 버튼은 계속 표시됩니다.
마크업:
<Window x:Class="Example"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Example"
StateChanged="Window_StateChanged">
코드 배면:
// Disable maximizing this window
private void Window_StateChanged(object sender, EventArgs e)
{
if (this.WindowState == WindowState.Maximized)
this.WindowState = WindowState.Normal;
}
@MattHamilton이 제안한 솔루션의 이 변종은 Window의 컨스트럭터에서 호출할 수 있습니다(또, 반드시 호출할 필요가 있습니다).요령은 대리인을 등록하는 것입니다.SourceInitialized
확장 메서드 내의 이벤트.
private const int GWL_STYLE = -16, WS_MAXIMIZEBOX = 0x10000, WS_MINIMIZEBOX = 0x20000;
[DllImport("user32.dll")]
extern private static int GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
extern private static int SetWindowLong(IntPtr hwnd, int index, int value);
/// <summary>
/// Hides the Minimize and Maximize buttons in a Window. Must be called in the constructor.
/// </summary>
/// <param name="window">The Window whose Minimize/Maximize buttons will be hidden.</param>
public static void HideMinimizeAndMaximizeButtons(this Window window)
{
window.SourceInitialized += (s, e) => {
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(window).Handle;
int currentStyle = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);
};
}
최소화 및 최대화 버튼을 제거하려는 경우 창의 ResizeMode="NoResize"를 설정할 수 있습니다.
그냥 사용하다
WindowStyle="ToolWindow"
최대 및 최소화 버튼은 숨겨지지만 창 테두리를 드래그하여 크기를 조정할 수 있으며 태스크바의 오른쪽 하단에 있는 숨기기 버튼을 사용하여 최소화할 수 있습니다.
언급URL : https://stackoverflow.com/questions/339620/how-to-remove-minimize-and-maximize-buttons-from-a-resizable-window
'programing' 카테고리의 다른 글
swift range를 [Int]로 변환합니다. (0) | 2023.04.09 |
---|---|
데이터가 있는 마지막 열을 찾으려면 어떻게 해야 합니까? (0) | 2023.04.09 |
StackPanel의 자녀가 최대 공간을 아래로 채우도록 하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
SwiftUI 텍스트 정렬 (0) | 2023.04.09 |
WPF 텍스트 블록에 경계 추가 (0) | 2023.04.09 |