using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Animation;
namespace TestProject;
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 하단 그리드 표시 여부
/// </summary>
private bool isBottomGridVisible = false;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
MouseMove += Window_MouseMove;
this.minimizeButton.Click += minimizeButton_Click;
this.maximizeButton.Click += maximizeButton_Click;
this.closeButton.Click += closeButton_Click;
this.settingButton.Click += settingButton_Click;
this.bottomGrid.MouseLeave += bottomGrid_MouseLeave;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 윈도우 마우스 이동시 처리하기 - Window_MouseMove(sender, e)
/// <summary>
/// 윈도우 마우스 이동시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Window_MouseMove(object sender, MouseEventArgs e)
{
Point mousePoint = e.GetPosition(this);
if(mousePoint.Y > ActualHeight - 30)
{
if(!this.isBottomGridVisible)
{
ShowBottomGrid();
}
}
}
#endregion
#region 최소화 버튼 클릭시 처리하기 - minimizeButton_Click(sender, e)
/// <summary>
/// 최소화 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void minimizeButton_Click(object sender, RoutedEventArgs e)
{
WindowState = WindowState.Minimized;
}
#endregion
#region 최대화 버튼 클릭시 처리하기 - maximizeButton_Click(sender, e)
/// <summary>
/// 최대화 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void maximizeButton_Click(object sender, RoutedEventArgs e)
{
if(WindowState == WindowState.Maximized)
{
WindowState = WindowState.Normal;
}
else
{
WindowState = WindowState.Maximized;
}
}
#endregion
#region 닫기 버튼 클릭시 처리하기 - closeButton_Click(sender, e)
/// <summary>
/// 닫기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void closeButton_Click(object sender, RoutedEventArgs e)
{
Close();
}
#endregion
#region 설정 버튼 클릭시 처리하기 - settingButton_Click(sender, e)
/// <summary>
/// 설정 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void settingButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "Settings button clicked!");
}
#endregion
#region 하단 그리드 마우스 이탈시 처리하기 - bottomGrid_MouseLeave(sender, e)
/// <summary>
/// 하단 그리드 마우스 이탈시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void bottomGrid_MouseLeave(object sender, MouseEventArgs e)
{
if(this.isBottomGridVisible)
{
HideBottomGrid();
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 하단 그리드 표시하기 - ShowBottomGrid()
/// <summary>
/// 하단 그리드 표시하기
/// </summary>
private void ShowBottomGrid()
{
DoubleAnimation doubleAnimation = new DoubleAnimation(100, TimeSpan.FromSeconds(0.3));
this.bottomGrid.BeginAnimation(HeightProperty, doubleAnimation);
this.isBottomGridVisible = true;
}
#endregion
#region 하단 그리드 숨기기- HideBottomGrid()
/// <summary>
/// 하단 그리드 숨기기
/// </summary>
private void HideBottomGrid()
{
DoubleAnimation doubleAnimation = new DoubleAnimation(0, TimeSpan.FromSeconds(0.3));
this.bottomGrid.BeginAnimation(HeightProperty, doubleAnimation);
this.isBottomGridVisible = false;
}
#endregion
}