글로벌 스타일을 무시하는 방법 (X : 키가없는) 또는 모든 유형 표적화 된 컨트롤에 명명 된 스타일을 적용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1303634

문제

프로젝트의 모든 버튼에 적용하고 싶은 스타일을 선언했습니다. 스타일은 Resourcedictionary에 있습니다.

<Style TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>

이제 일부 창에서는이 스타일에서 상속을 받고 싶지만 값을 추가합니다.

<Style TargetType="StackPanel"> 
    <Setter Property="Margin" Value="5"/>
</Style>

문제는 글로벌 스타일에 상속되지 않기 위해 전 세계 스타일에 키를 할당해야한다는 것입니다.

<Style TargetType="StackPanel" x:Key="StackPanelStyle" />

그런 다음 창의 XAML 상속 (또는/및 재정의 - 선택 사항)에서 :

<Style TargetType="StackPanel" BasedOn="StackPanelStyle" />

문제는 키를 할당하면 전역이 아니며 각 창/범위에서 호출해야한다는 것입니다.

내 질문에 대한 해결책은 두 사람 중 하나입니다. (내가 놓치고있는 다른 것이 있습니까?) : :

  1. 키가있는 글로벌 스타일이있어 전체 응용 프로그램의 모든 대상 컨트롤에 자동으로 적용됩니다.
  2. Resourcedictionary 수준의 이름이없는 스타일을 참조하지 않고 무시하는 방법.

나는 실제로 작동하는 명명 된 스타일 근처의 스타일을 개정하는 것에 대해 생각했습니다.

<!--In the ResourceDictionary-->
<Style x:Key="StackPanelStyle" TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!--In the app.xaml-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/>
<!--In the window/page scope-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/

그러나 나는 모든 스타일을 멍청하게 재구성하는 것보다 더 나은 것을 찾고 있습니다.

도움이 되었습니까?

해결책

이 시도:

<Style TargetType="{x:Type StackPanel}" BasedOn="{StaticResource {x:Type StackPanel}}">
  <!-- ... -->
</Style>

app.xaml의 Resourcedictionary에서 기본 스타일을 선언했습니다.

다른 팁

Global Resource Dictionary 어딘가에는 열쇠가있는 기본 스타일을 정의합니다. 이 기본 스타일은 해당 스타일을 적용하려는 모든 유형의 기본 유형을 대상으로합니다. 그런 다음 원하는 유형을 대상으로하고 위에서 언급 한 기본 스타일을 기반으로하는 스타일을 정의합니다.

<Style
    x:Key="upDownBaseStyle"
    TargetType="{x:Type Control}">
    <Setter
      Property="Margin"
      Value="2" />
    <Setter
      Property="HorizontalAlignment"
      Value="Stretch" />
    <Setter
      Property="VerticalAlignment"
      Value="Center" />
  </Style>

  <Style
    TargetType="{x:Type xceed:IntegerUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

  <Style
    TargetType="{x:Type xceed:DoubleUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

이제 두 가지 마지막 스타일은 키에 대한 언급없이 응용 프로그램 내의 모든 정수 및 더블 업 다운 컨트롤에 적용됩니다.

따라서 기본 규칙 : 기본 스타일에는이를 참조 할 키가 있어야하므로 파생 스타일은 키를 사용하지 않고 적용 할 수 있습니다.

여기서 당신이 찾고있는 것은 일반적으로 사용자 컨트롤을 만들어 달성하는 마스터 스타일 또는 행동 시나리오라고 제안합니다. '글로벌'스타일로 적용된 새 버튼 컨트롤을 만들려면 그 컨트롤을 사용할 때마다 간단히 추가 할 수 있습니다. '새로운 필요한 경우 스타일 또는 재정의 스타일.

사용자 컨트롤을 작성하지 않은 경우 구현하기 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top