1. Border를 활용해서 다양한 모양의 Button을 만들어 활용하고 싶었음
Mouse Button이 Border위에서 Down, Up 될 때 각각의 Border Thickness를 변경시켜 눌리는 것 처럼 구현
private void buttonDown (object sender, MouseButtonEventArgs e)
{
BD1.BorderThickness = new Thickness(5);
}
private void buttonUp(object sender, MouseButtonEventArgs e)
{
BD1.BorderThickness = new Thickness(2);
}
2. Border가 늘어날 수록 메서드의 갯수가 늘어나서 코드가 길어짐
모든 Border에 공통적으로 적용 할 수 있도록 변경
private void buttonDown (object sender, MouseButtonEventArgs e)
{
((Border)sender).BorderThickness = new Thickness(5);
}
private void buttonUp(object sender, MouseButtonEventArgs e)
{
((Border)sender).BorderThickness = new Thickness(2);
}
3. Border를 누른 후 Border 밖에서 마우스를 떼면 Thickness가 두꺼워진 상태에서 돌아오지 않음
IsMouseCaptured를 이용해서 Border밖으로 나가서 마우스를 떼더라도 정상적으로 돌아오도록 개선
[WPF/C#] IsMouseCaptured
IsMouseCaptured 속성을 MS문서에서 찾아보면, " 이 요소에 마우스가 캡쳐되는지 여부를 나타내는 값을 가져옵니다. " 라고 되어있는데, 이 부분이 잘 이해가 가지 않아서 더 자세한 내용을 찾아보았
jngsng.tistory.com
private void buttonDown (object sender, MouseButtonEventArgs e)
{
((Border)sender).BorderThickness = new Thickness(5);
((Border)sender).CaptureMouse();
}
private void buttonUp(object sender, MouseButtonEventArgs e)
{
((Border)sender).BorderThickness = new Thickness(2);
((Border)sender).ReleaseMouseCapture();
}
4. Border안에 ViewBox가 있고, 그 안에 Label이 들어가있는데 Label의 속성값에 접근하는 방법을 모름
Boder의 자식인 ViewBox, ViewBox의 자식인 Label을 차례로 접근해서 속성을 변경함
자식(Child)에 접근하는 방법에 대해 구현하면서 느낌은 알겠으나 명확하게는 잘 모르겠음
" as ~ " 가 붙은 부분들에 대해서 추가적으로 알아봐야 할 것 같음
internal void MenuButtonDown(object sender)
{
// Border의 Child인 ViewBox, ViewBox의 Child인 Label
Border border = (Border)sender;
Viewbox viewBox = border.Child as Viewbox;
Label label = viewBox.Child as Label;
// label의 Foreground 속성에 접근
label.Foreground = new SolidColorBrush(Colors.Green);
border.BorderThickness = new Thickness(5);
border.CaptureMouse();
}
internal void MenuButtonUp(object sender)
{
Border border = (Border)sender;
Viewbox viewBox = border.Child as Viewbox;
Label label = viewBox.Child as Label ;
label.Foreground = new SolidColorBrush(Colors.Black);
border.BorderThickness = new Thickness(2);
border.ReleaseMouseCapture();
}
'Language > C#' 카테고리의 다른 글
[C#/WPF] MouseDown Event 동작 안 함 (0) | 2023.03.24 |
---|---|
[C#/WPF] StackOverflowException 발생 (0) | 2023.03.23 |
[C#/WPF] IsMouseCaptured (0) | 2023.03.20 |
[C#/WPF] 시리얼 통신 중 메모리 누수? (0) | 2023.03.20 |
[C#/WPF] Trigger (0) | 2023.03.20 |