WPF Design 영역에서 리소스를 적용하는 방법? (Code Behind)

안녕하세요 :smile:

일반적으로 Xaml 상에서 ResourceDictionary를 등록하여 사용 중입니다.
이렇게 가져 올 경우 비주얼스튜디오 디자인 타임에서 리소스를 잘 인식합니다.

<SomeControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- ResourceDictionaries -->
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</SomeControl.Resources>

하지만 이런 작업이 없이도 디자인 타임에서 Resource를 인식할 수 있었으면 좋겠는데요.

제가 하고싶은 것은,

소스코드 상에서 적용했을 때 디자인 타임에서도 적용될 수 있는 방법이 없을까요?
오래전부터 시도해봤지만 해결 방법을 찾지 못했습니다.
(런타임에서는 적용이 되지만)

그래서 저는 유저컨트롤 별로 App.xaml을 두어 Design영역에서도 보이도록 하고 있습니다.


제가 원하는 방법을 간소화 하면…

public BaseView : UserControl
{
    public BaseView()
    {
        DesignTimeResoureAdd(resourceDictionary1);
        DesignTimeResoureAdd(resourceDictionary2);
    }
}

혹시 제가 하고자 하는 방법이 있을까요?

읽어주셔서 감사합니다!!

코드 상에서 추가할 경우 Runtime 실행에서는 잘 적용 되는데 디자인 상에서는 왜 적용되지 않는 것일까요?

Application.Current.Resources.MergedDictionaries.Add(...);

오래전부터 한참 찾아보긴 했는데 아직 해결은 하지 못했습니다.


그래서 차선책으로 Resource를 한 곳에 모아서 사용하고 있는데요.


App.xaml

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/DevFlow.Resources;component/ResourcePack.xaml"/>
    <ResourceDictionary Source="/DevFlow.Resources;component/TemplatePack.xaml"/>
    <ResourceDictionary Source="/DevFlow;component/ViewResourcePack.xaml"/>
</ResourceDictionary.MergedDictionaries>

ResourcePack.xaml

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/DevFlow.Resources;component/Theme/Black.xaml"/>
    <ResourceDictionary Source="/DevFlow.Resources;component/Geometry/GeometryPack.xaml"/>
</ResourceDictionary.MergedDictionaries>

이런식으로 묶어서 사용하고 있습니다.

(그리고 현재 진행 중인 개인 프로젝트에서도 이 구조를 실제로 사용 중입니다.)

https://github.com/devncore/devflow/blob/main/src/DevFlow/App.xaml

1개의 좋아요

소스코드로 관리하려는 니즈 또는 경험은 제가 없어서 원하시는 방법은 모릅니다.

사용하시는 방법이 아마도 일반적인 방법으로 보이는데요,

아래의 오픈소스 소스코드를 확인하시면 도움이 되지 않을까 생각해봅니다.

1개의 좋아요

@dimohy 감사합니다 :smile:

알려주신 오픈소스도 참고해보도록 하겠습니다!