[Avalonia - 01] 클래스 라이브러리를 통해서 사용자 지정 컨트롤 제작

안녕하세요.

지금 클래스 라이브러리 형태로, 사용자 지정 컨트롤(TemplatedControl 에서 상속받아서 클래스를 만들면서 진행)을 만들고 있습니다.

해당 프로젝트에서 Style 과 ResourceDictionary 를 통해서 UI 를 만들고 있습니다.

-MyControl(프로젝트)
–Themes
-MyControl.cs
-MyControl.axaml

이런식의 디렉토리 구조를 가지고 Themes 폴더 안에는,
–Themes
—Base.axaml
—MyControlStyle.axaml

ResourceDictionary 를 정의한 파일은 Base.axaml 입니다.
MyControlStyle.axaml 에서 이 Base.axaml 을 추가합니다.

[Styles
Styles.Resources
ResourceDictionary
ResourceDictionary.MergedDictionaries
ResourceInclude Source=Base.axaml 파일]

[질문]
여기서 부터 질문입니다.
Base.axaml 을 작성하는 방식입니다. 즉, ResourceDictionary 를 정의 하는 방법이 두가지 있는데 하나는 ResourceDictionary 를 사용하는 방법과 또 다른 하나는 Avalonia.Controls 네임스페이스를 가지는 ResourceDictinary 를 사용하는 경우 입니다.

  1. Avalonia.Controls 네임스페이스의 Avalonia.Styling 어셈블리에 있는 ResourceDictionary 코드 예

  2. 일반적인 ResourceDictionary 코드 예
    image

사실 둘다 테스트 했는데 문제는 둘다 1차적으로 나타나는 문제는 없었습니다. Demo 에서 화면에 보여지는 정도여서 테스트라 할 수는 없지만 화면에 나타나는 모습은 동일 했습니다.

여기서, Chatgpt 의 답변은 아래와 같습니다.

" Avalonia에서 ResourceDictionary를 사용하는 방법에는 두 가지가 있습니다.

첫 번째 방법은 Avalonia 스타일러블 컨트롤에 대한 스타일을 정의할 때 사용되는 <controls:ResourceDictionary> 입니다. 이 경우 Avalonia.Styling 어셈블리에서 제공하는 ResourceDictionary 클래스가 아닌 Avalonia.Controls 어셈블리에서 제공하는 ResourceDictionary 클래스를 사용하게 됩니다. 이 방법은 컨트롤의 스타일에 대한 리소스를 정의하고 재사용할 수 있는 경우에 적합합니다.

두 번째 방법은 일반적인 리소스를 정의할 때 사용하는 <ResourceDictionary> 입니다. 이 경우 Avalonia.Styling 어셈블리에서 제공하는 ResourceDictionary 클래스를 사용합니다. 이 방법은 일반적인 리소스를 정의하고 재사용할 수 있는 경우에 적합합니다.

따라서, 컨트롤의 스타일에 대한 리소스를 정의하려면 <controls:ResourceDictionary>를 사용하고, 일반적인 리소스를 정의하려면 <ResourceDictionary>를 사용하는 것이 좋습니다."

사실 답변이 정확하진 않긴한데 대답들이 비슷한 형태로 나오기는 합니다. 또한 여러 오픈소스들을 검색해봐도 둘다 사용하고 있긴 하고 있습니다.

여러 개발자 선배님들, 어떤 방식으로 사용하는 게 적당할 까요?

참고> Avalonia 0.10.19, .Net 7 사용

1개의 좋아요

아마 두 가지가 다르지 않고 동일한 ResourceDictionary 일 것입니다.

1개의 좋아요