Xamarin.Forms Control Template

안녕하세요. 저는 지금 Xamarin.Forms 공부를 하고 있습니다.
ControlTemplate을 사용해서 재사용 가능한 컨트롤을 만들려고 하는데 몇 가지 궁금한 것들이 있어서 글을 올립니다.

  • CustomButton을 만들기 위해 ControlTemplate을 사용했는데 Xamarin.Forms는 Button을 상속 받아 사용하려면 Template에 접근할 수가 없더라고요. 그래서 ContentView를 상속 받아서 만들었는데 이 경우에는 Button이라면 가져야 할 기본 동작들이 되지 않았습니다. (WPF는 Button 상속 받아서 잘 만들었었는데…)

  • 이 때, 저에게 필요한 Button의 속성들을 일일이 하나씩 BindableProperty를 만들어서 사용해야 하는 것인가요? 원래 이런 방식으로 하는 것인지 아니면 다른 방법이 있는지 궁금합니다:joy:

1개의 좋아요

안녕하세요.

저도 ControlTemplate를 통해 시도해봤었지만…불가능했던걸로 기억하고 있습니다.
Button 속성을 쓰신다고 하셨었는데 혹시 어떤걸 쓰시는지 물어보기전에… 추측해서 글을 이어가겠습니다.

  • IsMouseOver 이벤트
    앱에서 Mouse가 없다보니… 필요없을 거같네요…대신 비슷한 기능을 해주는것이 있습니다.
    Xamarin.Forms Visual State Manager - Xamarin | Microsoft Learn 참고바랍니다!
  • Click 이벤트
    아무래도 버튼이면 이벤트 발생 인데 [MAUI] Switch CheckBox 이벤트 질문 여기 답변을 달아드렸듯이 컨트롤 모든 부분에서는 제스쳐 이벤트가 있습니다.
    제스쳐에도 탭제스쳐(클릭) 외에도 좌에서 우로… 우에서 좌로 위에서 아래로 여러가지 활용해서 사용이 가능합니다.

p.s 최근 ms에서 발표한 내용에서 xamarin.forms가 내년 24년 5월에 지원이 종료된다고하네요…! Maui로…해보심이…

1개의 좋아요

그렇군요…! 감사합니다.

예를 들어, ImageButton을 사용하지 않고, Frame>StackLayout에 Path, Label을 넣어서 새로운 템플릿으로 버튼을 만들고 싶으면 Frame의 BackgroundColor부터 Command, 등 모든 속성을 하나씩 넣어서 만드는 수밖에 없다는 것으로 이해해도 될까요?

image

이런식의 버튼을 만든다고 했을때요!!

네,
WPF처럼 IsHitTestVisible을 기능이 없어서 현재까지 제가 알기론 그렇습니다. :joy:

다만,
Frame에만 Command 속성을 부여하고 나머지 그 위에 여러 컨트롤에 IsEnabled 처리하여 비슷하게 동작되는것은 확인했었습니다 그렇지만 일부 컨트롤에서는 IsEnabled를 하게 되면 색상이 변하게 되서 좋지 않다고 하더라구요.

1개의 좋아요

이것저것 찾아보다가 이 자료를 봤는데

https://github.com/jsuarezruiz/ways-create-netmaui-controls

한번 보시겠어요…? 이 분이 작성하신 코드 중에 TemplatedControl을 보면 저한테는 놀라운 방법인 것 같아서 공유해봅니다… 하하

3개의 좋아요

오홍…
모든 컨트롤이 탭제스쳐 이벤트를 갖게되네요?
신박하네요!