2016-12-14 3 views
0

리소스 사전 (다시 modernui과 함께 제공됨)에 지정된 스타일이 적용된 사용자 정의 컨트롤 (modernTab, modernui으로 증명)이 있습니다. 괜찮로컬 스타일로 사전 스타일 덮어 쓰기

는이 응용 프로그램에 대한 스타일은 다음과 같이 보이는 App.xaml 파일에 몇 가지 기본 자원을 통해 제공됩니다 잘 좋은

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" /> 
    <ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Light.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

합니다. 그러나, 나는 현대 tab의 특정 인스턴스에 사용하고있는 링크 스타일을 오버라이드하고 싶다. 그래서 내 XAML에, 나는 이런 식으로 일을하려고 해요 : 이제

<mui:ModernTab ListWidth="Auto" 
       Layout="List" 
       Links ="{Binding MyViewModelLinks}"> 
    <mui:ModernTab.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="Foreground" Value="Black" /> 
      <Setter Property="Background" Value="Yellow" /> 
     </Style> 
    </mui:ModernTab.Resources> 
</mui:ModernTab> 

, 나는 아래로 modernTab 컨트롤의 용기 내부는 ListBoxItems의 무리를 가지고 소스보고에서 알 -이 무엇인지 스타일을 바꾸고 싶습니다.

내가 얻지 못하는 이유는 내 "로컬"스타일이이 특정 인스턴스에 대해 우선 적용되고 무시되지 않는 이유입니다. 어떤 아이디어?

App.xaml에서 내 스타일 재정의를 정의하려고했지만 (실제로는 전역이 아니길 바라고 있지만) 작동하지 않았습니다. 분명히 나는 ​​뭔가를 놓치고있다.

+0

: 이것은 트릭해야 ModernTab'하는 [''ListBox'는 ListBox.ItemContainerStyle' 포함] https://github.com/firstfloorsoftware/mui (존재 /blob/cbd78931b5ffd1a77c8a82a423100e11015203c2/1.0/FirstFloor.ModernUI/Shared/Themes/ModernTab.xaml#L21)이 설정됩니다. 나는 이것이 암시적인'ListBoxItem' 스타일보다 우선한다고 생각한다. 전체 구조가 나에게 매우 유연하게 보이지 않으므로 스타일을 바꾸기 전에 두 번 생각하십시오. – grek40

답변

1

하는 데 도움이됩니다. MUI '의`ControlTemplate`에서

<mui:ModernTab ListWidth="Auto" 
       Layout="List" 
       Links ="{Binding MyViewModelLinks}"> 
     <mui:ModernTab.Resources> 
      <Style TargetType="ListBox"> 
       <Setter Property="ItemContainerStyle"> 
        <Setter.Value> 
         <Style TargetType="ListBoxItem"> 
          <Setter Property="Foreground" Value="Black" /> 
          <Setter Property="Background" Value="Yellow" /> 
         </Style> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </mui:ModernTab.Resources> 
    </mui:ModernTab> 
+0

그래, 그래, 그게 효과가있어! 왜 그래도 이해가 안돼!왜 내가 목록 상자를 지정한 다음 트리 아래로 가서 ListBoxItem 스타일을 설정해야합니까? 왜 그냥 ListBoxItem 스타일을 직접 설정할 수 없습니까? – Coopernick

+0

ModernTab의 기본 ControlTemplate에있는 ListBox는 ListBox의 ItemContainerStyle을 설정하므로이 태그가 우선 적용되고 ModernTab의 리소스로 지정하는 암시 적 ListBoxItem 스타일에 적용됩니다. 스타일 검색이 작동하는 방식입니다. – mm8

2

당신이 ModernTab의 기본 스타일을 무시하지만 특정 인스턴스의 리소스를 지정하지 않는 여기서 뭐하는, 스타일은 여전히의 인스턴스에 대한 인라인 스타일을 지정하기 위해 여기에해야 할 일은 ModernTab.xaml

에서됩니다 촬영 ModernTab :

<mui:ModernTab ...> 
    <mui:ModernTab.Style> 
     <Style TargetType="mui:ModernTab"> 
      <!------- Full ModernTab Style -----> 
     </Style> 
</mui:ModernTab.Style> 

이 인라인 스타일은 기본값보다 우선합니다. 기본 스타일에 이름 (x:Key)이 없기 때문에 기본 ModernTab 스타일을 기반으로 스타일을 만들 수없고 작은 세부 사항을 조정할 수 없다는 것이 나쁜 소식입니다. 하지만 전체 스타일을 복사하고 원하는 스타일로 변경하고 대신 사용할 수 있습니다. 당신은 아마이처럼 ModernTab 인스턴스에 리소스 파일에 넣어 다음 사용한다 :

<mui:ModernTab Style={StaticResource MyAwesomeStyle} .../> 

희망이 당신은 "재정의"를 ModernTab에서리스트 박스의 ItemContainerStyle 필요

+1

BasedOn = "{StaticResource {x : Type mui : ModernTab}} ". 자동 사전 스타일 (x : Key 제외)이 리소스 사전에 선언되면 WPF는 스타일의 TargetType을 키로 사용합니다. – Pavel

+1

@Pavel 굉장! 암시 적 핵심 요소를 알고 있었지만 내재적 키를 사용하여 스타일을 참조 할 수 있는지 여부를 알지 못했습니다. 실제로 많은 감각을 만들어, 감사합니다! –

+0

@Pavel 맞습니까? 나는