WPF에서 내포된 요소 스타일 지정
중첩된 요소 구조가 있다고 가정합니다. 예를 들어, 메뉴 항목이 있는 상황별 메뉴:
<ContextMenu Style="{StaticResource FooMenuStyle}">
<MenuItem Style="{StaticResource FooMenuItemStyle}"/>
...
</ContextMenu>
상황에 맞는 메뉴 또는 메뉴 항목 요소에 스타일 또는 템플리트를 쉽게 적용할 수 있습니다.그러나 MenuItem 스타일이 Menu 스타일에 속하는 경우 모든 MenuItem 요소에 추가하는 것은 상당히 번거롭고 중복됩니다.
어린이 요소에 자동으로 적용할 수 있는 방법이 있습니까?따라서 다음과 같이 간단히 작성할 수 있습니다.
<ContextMenu Style="{StaticResource FooMenuStyle}">
<MenuItem/>
...
</ContextMenu>
FooMenuStyle이 MenuItem 요소를 포함하는 스타일을 만들 수 있다면 깔끔하겠지만, 그것은 불가능할 것 같습니다.
편집: ItemContainerStyle을 몰랐고 일반적인 솔루션을 의도했기 때문에 메뉴 예제가 오해의 소지가 있을 수 있습니다.두 가지 답변을 바탕으로 두 가지 해결책을 생각해 냈습니다. 하나는 일반 변형이고 다른 하나는 ItemContainerStyle 등에 대한 것입니다.
<Style x:Key="FooMenuItem" TargetType="{x:Type MenuItem}">
...
</Style>
<Style x:Key="FooMenu" TargetType="{x:Type ContextMenu}">
<!-- Variant for specific style attribute -->
<Setter Property="ItemContainerStyle"
Value="{StaticResource FooMenuItem}"/>
<!-- General variant -->
<Style.Resources>
<Style TargetType="{x:Type MenuItem}"
BasedOn="{StaticResource FooMenuItem}"/>
</Style.Resources>
</Style>
<ContextMenu Style="{StaticResource FooMenu}">
<MenuItem/>
</ContextMenu>
원본 답변을 완성하기 위해 부모 내부에 중첩된 스타일을 추가하는 것이 더 명확하다고 생각합니다.
<Style x:Key="WindowHeader" TargetType="DockPanel" >
<Setter Property="Background" Value="AntiqueWhite"></Setter>
<Style.Resources>
<Style TargetType="Image">
<Setter Property="Margin" Value="6"></Setter>
<Setter Property="Width" Value="36"></Setter>
<Setter Property="Height" Value="36"></Setter>
</Style>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap"></Setter>
</Style>
</Style.Resources>
</Style>
<ContextMenu>
<ContextMenu.Resources>
<Style TargetType="{x:Type MenuItem}">
<!--Setters-->
</Style>
</ContextMenu.Resources>
<MenuItem/>
<!--Other MenuItems-->
</ContextMenu>
이 스타일은 컨텍스트 메뉴 내의 모든 MenuItem 개체에 적용됩니다.
<ContextMenu ItemContainerStyle="{StaticResource FooMenuItemStyle}">
<MenuItem/>
</ContextMenu>
제가 이 작업을 수행한 방법은 키를 사용하여 ResourceDictionary
글로벌 리소스 사전 내에서 상위 요소에만 적용합니다.
내부 앱.xaml:
<Application.Resources>
<ResourceDictionary>
...
<ResourceDictionary x:Key="menuChildrenStyles">
<Style TargetType="MenuItem">
<!--Setters-->
</Style>
</ResourceDictionary>
...
</ResourceDictionary>
</Application.Resources>
그런 다음 다른 xaml 보기 내부:
<ContextMenu Resources="{StaticResource menuChildrenStyles}">
<MenuItem />
<MenuItem />
<MenuItem />
<MenuItem />
</ContextMenu>
이것은 적용될 것입니다.MenuItem
누구에게나 어울리는 스타일MenuItem
요소가 상위 요소 내부에 있습니다.
다음과 같이 "menuChildrenStyles" 사전에 추가 스타일을 추가할 수도 있습니다.TextBlock
,기타.
언급URL : https://stackoverflow.com/questions/666269/styling-nested-elements-in-wpf
'programing' 카테고리의 다른 글
이클립스에서 Android용으로 개발: R.java가 재생되지 않음 (0) | 2023.05.11 |
---|---|
Git push를 사용하여 프로젝트 배포 (0) | 2023.05.11 |
WPF C# 버튼 스타일 (0) | 2023.05.11 |
내 레지스트리 없이 개인 NPM 모듈을 설치하는 방법은 무엇입니까? (0) | 2023.05.11 |
Visual Basic에서 문자를 선언하는 방법은 무엇입니까?NET? (0) | 2023.05.11 |