야외 사용을위한 사용자 정의 '고 대비'테마가있는 응용 프로그램을 빌드하면 런타임 중에 켜기/끄기를 전환 할 수 있습니다. 이것은 메뉴 항목의 사용 스타일을 지정하지 않는 경우는 잘 작동Style BasedOn 용 DynamicResource
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource Theme_MenuItemTemplate}"/>
</Style>
... 병합 아래처럼 스타일이 포함 된 리소스 사전을 유엔 - 병합하여 잘 작동합니다. 이것은 Styles없이 ItemsSource 생성 된 자식을 바인딩 할 수있는 방법이 없기 때문에 현실적이지 않습니다. 예를 들어 : 내 BasedOn이 런타임에 변경됩니다 수 있기 때문에 StackOverflow에 다른 모든 포스트 방금이 작업을 수행 할 필요가 말한다
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="IsCheckable" Value="True"/>
<Setter Property="IsChecked" Value="{Binding Path=Checked}"/>
<EventSetter Event="Checked" Handler="HistoryItem_Checked"/>
</Style>
</ContextMenu.ItemContainerStyle>
...
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
을하지만 내 상황이 작동하지 않습니다 물론 BasedOn 속성에는 DynamicResource 확장을 사용할 수 없습니다. 내 응용 프로그램에서이 작업을 수행하면 컨트롤을로드 할 때 스타일이 달라 붙는 대신 다른 모든 컨트롤이 다시로드되지 않고 올바르게 전환되는 컨트롤로 연결됩니다.
그래서 내 질문 ...
가 BasedOn 근무 DynamicResource 확장을 얻을 수있는 방법이 있나요 또는 다른 방법이있다는/나는이 작동하도록하기 위해 구현 해킹에서?
기본 스타일을 '복사'하는 쉬운 방법이 있습니다. 나는 이것을 새로운 대답으로 추가했다. – aliceraunsbaek