我有一个自定义标题栏,窗口样式设置为无。在单击标题栏时,我检查是否双击(执行窗口最大化和还原),如果不是双击,则执行Window.DragMove
。这对于将窗口吸附到侧面和顶部非常有效。但是,当我尝试在窗口最大化时拖动窗口(通常会恢复窗口),它什么也不做。以下是我的代码:
static Window Window { get { return Application.Current.MainWindow; } }
/// <summary>
/// TitleBar_MouseDown - Drag if single-click, resize if double-click
/// </summary>
private static void TitleBar_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
if (e.ClickCount == 2)
{
AdjustWindowSize();
}
else
{
Window.DragMove();//Here is where I do the drag move
}
}
}
/// <summary>
/// Adjusts the WindowSize to correct parameters when Maximize button is clicked
/// </summary>
internal static void AdjustWindowSize()
{
if (Window.WindowState == WindowState.Maximized)
{
SystemCommands.RestoreWindow(Window);
}
else
{
SystemCommands.MaximizeWindow(Window);
}
}
#region Button Events
/// <summary>
/// CloseButton_Clicked
/// </summary>
public static void Close()
{
SystemCommands.CloseWindow(Window);
}
/// <summary>
/// MaximizedButton_Clicked
/// </summary>
public static void Maximize()
{
AdjustWindowSize();
}
/// <summary>
/// Minimized Button_Clicked
/// </summary>
public static void Minimize()
{
SystemCommands.MinimizeWindow(Window);
}
#endregion
现代UI和MahApps.Metro以某种方式实现了它,我简要查看了它们的源代码,但找不到它们如何实现的方法。
提前致谢。
WindowChrome.IsHitTestVisibleInChrome="True"
?这是让那些按钮正常工作所必需的。你也可以单独为每个按钮进行设置。 - pushprajMainWindow.xaml
,这将使主窗口中的 ComboBox 和 Button 也能够使用。 - pushpraj