2011-09-13 3 views
4

두 개의 리소스 사전이 있습니다. 하나는 ResDictGlass.xaml이고 다른 하나는 ResDictNormal.xaml입니다. 둘 다 동일한 속성과 다른 값을가집니다.리소스 사전을 제거하고 WPF에 다른 리소스 사전 추가

<Style x:Key="StyleTitleText" TargetType="TextBlock"> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="FontSize" Value="14"/> 
    <Setter Property="Foreground" Value="Green" /> 
</Style> 

ResDictNormal.xaml에 같은 스타일은 다음과 같습니다 : 예를 들어

ResDictGlass.xaml는 다음과 같이 하나 개의 스타일을 가지고

: 나는대로 XAML에서 TextBlock을 설정

<Style x:Key="StyleTitleText" TargetType="TextBlock"> 
    <Setter Property="FontFamily" Value="Tahoma" /> 
    <Setter Property="FontSize" Value="14"/> 
    <Setter Property="Foreground" Value="WhiteSmoke" /> 
</Style> 

<TextBlock Style="{DynamicResource StyleTextblock}" Text="Prod.Code" VerticalAlignment="Top" /> 

런타임에 이러한 스타일 사이를 전환하고 싶습니다. 내가하는 일은 다음과 같습니다.

  case "normal": 
       ResourceDictionary ResDict1 = new ResourceDictionary(); 
       ResDict1.Source = new Uri("/ResDictNormal.xaml", UriKind.RelativeOrAbsolute); 
       Application.Current.Resources.MergedDictionaries.Add(ResDict1); 
       break; 

      case "flip": 
       ResourceDictionary ResDict2 = new ResourceDictionary(); 
       ResDict2.Source = new Uri("/ResDictGlass.xaml", UriKind.RelativeOrAbsolute); 
       Application.Current.Resources.MergedDictionaries.Add(ResDict2); 
       break; 

올바른 방법입니까? 현재 사전을 제거한 다음 사전을 추가해야합니까?

답변

4

예 두 개의 사전 중 하나를 앱에 병합하고 둘 다 병합하지 않으려는 경우가 있습니다. 그렇지 않으면 모호한 resourecs는 참조시 오류를 발생시킵니다.

DynamicResourceStaticResource 이상으로 사용해야 할 수도 있습니다. 테마가 동적으로 UI를 업데이트해야하는 경우 (예 : 전체 UI 리로딩 사용 안 함).

도움이 될지 알려주세요.

+0

안녕하세요 천사, 답장을 보내 주셔서 감사합니다. 나는 두 개의 라디오 버튼을 가지고 있는데 하나는 정상적인 것이고 다른 하나는 뒤집기를위한 것이다. 라디오 버튼 선택에 따라 이러한 스타일을 교환하고 싶습니다. 그래서 하나를 제거하고 다른 하나를 추가해야합니까? – sony

+0

예. 오래된 병합 된 사전을 제거하고 새 병합을 추가해야합니다. 또한'StaticResource'가 아니라'DynamicResource' 마크 업 참조를 사용해야합니다. –

+0

C# 코드를 통해 그 코드를 제거하는 방법은 무엇입니까?, thanks – sony

관련 문제