using Microsoft.UI.Xaml;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public sealed partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
SetSelectAllCheckBoxValue();
this.twoStateTextBlock.Text = "박스 체크 해제";
this.threeStateTextBlock.Text = "박스 체크 해제";
this.twoStateCheckBox.Checked += twoStateCheckBox_Checked;
this.twoStateCheckBox.Unchecked += twoStateCheckBox_Unchecked;
this.threeStateCheckBox.Indeterminate += threeStateCheckBox_Indeterminate;
this.threeStateCheckBox.Checked += threeStateCheckBox_Checked;
this.threeStateCheckBox.Unchecked += threeStateCheckBox_Unchecked;
this.selectAllCheckBox.Checked += selectAllCheckBox_Checked;
this.selectAllCheckBox.Unchecked += selectAllCheckBox_Unchecked;
this.selectAllCheckBox.Indeterminate += selectAllCheckBox_Indeterminate;
this.option1CheckBox.Checked += optionCheckBox_Checked;
this.option1CheckBox.Unchecked += optionCheckBox_Unchecked;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 2단계 상태 체크 박스 체크시 처리하기 - twoStateCheckBox_Checked(sender, e)
/// <summary>
/// 2단계 상태 체크 박스 체크시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void twoStateCheckBox_Checked(object sender, RoutedEventArgs e)
{
this.twoStateTextBlock.Text = "박스 체크";
}
#endregion
#region 2단계 상태 체크 박스 체크 해제시 처리하기 - twoStateCheckBox_Unchecked(sender, e)
/// <summary>
/// 2단계 상태 체크 박스 체크 해제시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void twoStateCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
this.twoStateTextBlock.Text = "박스 체크 해제";
}
#endregion
#region 3단계 상태 체크 박스 체크시 처리하기 - threeStateCheckBox_Checked(sender, e)
/// <summary>
/// 3단계 상태 체크 박스 체크시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void threeStateCheckBox_Checked(object sender, RoutedEventArgs e)
{
this.threeStateTextBlock.Text = "박스 체크";
}
#endregion
#region 3단계 상태 체크 박스 체크시 처리하기 - threeStateCheckBox_Unchecked(sender, e)
/// <summary>
/// 3단계 상태 체크 박스 체크시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void threeStateCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
this.threeStateTextBlock.Text = "박스 체크 해제";
}
#endregion
#region 3단계 상태 체크 박스 미확정시 처리하기 - threeStateCheckBox_Indeterminate(sender, e)
/// <summary>
/// 3단계 상태 체크 박스 미확정시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void threeStateCheckBox_Indeterminate(object sender, RoutedEventArgs e)
{
this.threeStateTextBlock.Text = "박스 상태 미확정";
}
#endregion
#region 모두 선택하기 체크 박스 체크시 처리하기 - selectAllCheckBox_Checked(sender, e)
/// <summary>
/// 모두 선택하기 체크 박스 체크시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void selectAllCheckBox_Checked(object sender, RoutedEventArgs e)
{
this.option1CheckBox.IsChecked = this.option2CheckBox.IsChecked = this.option3CheckBox.IsChecked = true;
}
#endregion
#region 모두 선택하기 체크 박스 체크 해제시 처리하기 - selectAllCheckBox_Unchecked(sender, e)
/// <summary>
/// 모두 선택하기 체크 박스 체크 해제시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void selectAllCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
this.option1CheckBox.IsChecked = this.option2CheckBox.IsChecked = this.option3CheckBox.IsChecked = false;
}
#endregion
#region 모두 선택하기 체크 박스 미확정시 처리하기 - selectAllCheckBox_Indeterminate(sender, e)
/// <summary>
/// 모두 선택하기 체크 박스 미확정시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void selectAllCheckBox_Indeterminate(object sender, RoutedEventArgs e)
{
if
(
this.option1CheckBox.IsChecked == true &&
this.option2CheckBox.IsChecked == true &&
this.option3CheckBox.IsChecked == true
)
{
this.selectAllCheckBox.IsChecked = false;
}
}
#endregion
#region 옵션 체크 박스 체크시 처리하기 - optionCheckBox_Checked(sender, e)
/// <summary>
/// 옵션 체크 박스 체크시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void optionCheckBox_Checked(object sender, RoutedEventArgs e)
{
SetSelectAllCheckBoxValue();
}
#endregion
#region 옵션 체크 박스 체크 해제시 처리하기 - optionCheckBox_Unchecked(sender, e)
/// <summary>
/// 옵션 체크 박스 체크 해제시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void optionCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
SetSelectAllCheckBoxValue();
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 모두 선택하기 체크 박스 값 설정하기 - SetSelectAllCheckBoxValue()
/// <summary>
/// 모두 선택하기 체크 박스 값 설정하기
/// </summary>
private void SetSelectAllCheckBoxValue()
{
if(this.option1CheckBox != null)
{
if(this.option1CheckBox.IsChecked == true && this.option2CheckBox.IsChecked == true && this.option3CheckBox.IsChecked == true)
{
this.selectAllCheckBox.IsChecked = true;
}
else if(this.option1CheckBox.IsChecked == false && this.option2CheckBox.IsChecked == false && this.option3CheckBox.IsChecked == false)
{
this.selectAllCheckBox.IsChecked = false;
}
else
{
this.selectAllCheckBox.IsChecked = null;
}
}
}
#endregion
}
}