DynamicResource에 대한 WPF 지원은 사용자가 실행중인 응용 프로그램의 모양과 변경을 변경할 수 있기 때문에 좋습니다.Windows의 DynamicResource 앱 앱을 저장 하시겠습니까?
WinRT는 DynamicResource를 지원하지 않습니다.
사용자가 동적으로 UI 테마를 변경할 수있게 해주는 앱을 작성하는 권장 방법은 무엇입니까?
DynamicResource에 대한 WPF 지원은 사용자가 실행중인 응용 프로그램의 모양과 변경을 변경할 수 있기 때문에 좋습니다.Windows의 DynamicResource 앱 앱을 저장 하시겠습니까?
WinRT는 DynamicResource를 지원하지 않습니다.
사용자가 동적으로 UI 테마를 변경할 수있게 해주는 앱을 작성하는 권장 방법은 무엇입니까?
MVVM 패턴을 사용하는 경우보기 및보기 모델과 결혼하는 방식에 따라 기본 데이터를 다시 만들지 않고 전환 된 테마를 기반으로보기를 다시 만드는 것이 매우 쉽습니다.
테마 리소스 사전을 여러 개 갖고 있으며 애플리케이션 리소스 사전과 병합 한 다음 전환하여 해당보기를 다시 만듭니다.
저는 현재 이것에 대해서도 좋은 디자인을 제시하려고합니다. DynamicResources가 부족하다는 사실을 알기 전에 나는 "ready-to-go"라고 공정하게 뭔가를 가지고있었습니다. 죄송합니다. 그런 다음 어떤 테마 -을 도출 할
public class ThemedViewModel : ViewModelBase
{
public Brush Foreground { get { return ViewModelSelector.Settings.Theme.Foreground; } }
public ThemedViewModel()
{
ViewModelSelector.Settings.PropertyChanged += (sender,arg) =>
{
if(arg.PropertyName == "Theme")
{
RaisePropertyChanged("Foreground");
}
}
}
}
:
내가 함께 온 가장 좋은 방법은에 요소가 결합 할 수있는 UI 자원을 설정 VM에 대한 변경 사항을 청취하고 노출하는 ThemedViewModel 기반을 가지고하는 것입니다 이것으로부터 VM 기반 VM을 가져오고 테마 UI 요소는 노출 된 리소스에 바인딩됩니다. 그것은 상당히 건조하지만 내 마음 속의 VM의 요점을 깨뜨립니다. VM에 UI 리소스가 없어야합니다. VM에서 어떻게 보이는지는 저와 잘 어울리지 않습니다. 그러나 테마가 내 코드의보기 섹션에 제약을받는 모든 접근 방식은 바인딩 타임에 문제가있는 것으로 보입니다.
항상 동적 리소스가 필요한 것은 아닙니다. 다음과 같이 "정적"리소스의 값을 변경하십시오.
Resources.Remove("foo");
Resources.Add("foo", "A new hope");
이것은 선언적 항목에는 항상 작동하지 않습니다. 이러한 경우 래퍼 객체를 제공 할 수 있습니다. 래퍼를 바꿀 수는 없지만 은 속성을 업데이트 할 수 있습니다. 아아, 이것이 실행 불가능한 경우가 있습니다.