2015-01-09 4 views
2

주로 사소한 편집이 있고 대부분 반복되는 스타일 요소가 있습니다. 내가 좀 더 일반적인 어떻게해야합니까 - 그래서 세터 속성 내에서 설정되는 모든 setter 속성은 여백과 폰트 크기를 제외하고 동일 코드에서 보듯이 두 번코드 재사용 가능 스타일

<ResourceDictionary> 
<Style x:Key="TextBlockStyleEnvironment" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Margin" Value="5,4,0,0" /> 
    <Setter Property="FontSize" Value="8" /> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="VerticalAlignment" Value="Stretch" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
</Style> 
<Style x:Key="TextBlockStyleLocation" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Margin" Value="5,4,0,0" /> 
    <Setter Property="FontSize" Value="10" /> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="VerticalAlignment" Value="Stretch" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
</Style> 
</ResourceDictionary> 

를 코드를 반복 대 값을 기준으로. 또한 렌더링시 스크린 샷이 첨부됩니다. 이 소모 될 때 XAML에서 지역 수준에서 선언이 스타일 (Style)에 포함이 자신을 유지하려는를하지 -

enter image description here

있습니다.

<Grid DataContext="{....}"> 
    <StackPanel> 
    <TextBlock Text="{Binding Environment}" Style="{StaticResource TextBlockStyleEnvironment}"/> 
    <TextBlock Text="{Binding Location}" Style="{StaticResource TextBlockStyleLocation}"/> 

답변

3
당신은 스타일 상속을 사용할 수 있습니다

을 : 다음과 같이 봉투의

가능한 값은 XAML에서 소비

LN

니펫을 TK 수 있습니다 데브, 품질, 생산성 및 위치의 가능한 값이 될 수 있습니다

<ResourceDictionary> 
    <Style x:Key="BaseTextBlockStyle" TargetType="{x:Type TextBlock}"> 
     <Setter Property="Margin" Value="5,4,0,0" /> 
     <Setter Property="FontSize" Value="8" /> 
     <Setter Property="HorizontalAlignment" Value="Stretch" /> 
     <Setter Property="VerticalAlignment" Value="Stretch" /> 
     <Setter Property="FontWeight" Value="Bold" /> 
    </Style> 

    <Style x:Key="TextBlockStyleEnvironment" BasedOn="{StaticResource BaseTextBlockStyle}" TargetType="{x:Type TextBlock}" /> 

    <Style x:Key="TextBlockStyleLocation" BasedOn="{StaticResource BaseTextBlockStyle}" TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontSize" Value="10" /> 
    </Style> 
</ResourceDictionary> 

또한 첨부 된 속성을 만들고 컨트롤 템플릿 내에서 바인딩 할 수 있습니다. 따라서 분이 달라야하기 때문에 수백 가지 스타일을 만들 필요가없는 유연성을 제공합니다.

좋은 예는 이미지가있는 버튼입니다. 마우스가 이미지 위에 있으면 이미지를 변경해야합니다. 일반적으로 그 동작을 구현하는 각 버튼에 대해 새로운 컨트롤 템플릿/스타일을 만들어야합니다. 그러나 NormalStateImageSource와 MosueOverImageSource라는 두 개의 연결된 속성을 만들면 컨트롤 템플릿의 속성에 바인딩 할 수 있습니다. 이렇게하면 단추에 대해 완전한 스타일의 단일 스타일을 유지하고 나중에 이러한 연결된 속성의 값만 변경하는 다른 단추에 대한 개별 스타일을 선언 할 수 있습니다.

0

WPF 세계에는 몇 가지 기술이 있습니다. 먼저

, 스타일은 동일한 유형의 경우, 그것은 BasedOn 속성을 사용하는 것이 가능하다 다음 BasedOn 속성이 때로는 정말 지저분한 얻을 수 그러나

<Style x:Key="GenericTextBlockStyle" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Margin" Value="5,4,0,0" /> 
    <Setter Property="FontSize" Value="8" /> 
</Style> 

<Style x:Key="TextBlockStyleEnvironment" 
     BasedOn="{StaticResource GenericTextBlockStyle}" 
     TargetType="{x:Type TextBlock}"> 

</Style> 

.

<Thickness x:Key="LeftBorderMargin" Top="10" /> 

<Style x:Key="TextBlockStyleEnvironment" TargetType="{x:Type TextBlock}"> 
    <Setter Property="Margin" Value="{StaticResource LeftBorderMargin}" /> 
</Style> 

그것은 재사용 들어, Style 요소에서에서 모든 색상/여백을 리팩토링하는 것이 일반적이 : 그것은 그것에게 동일한 유형없는 요소 작동이 방법을 수행하는 것도 가능합니다.

+0

여기서 가능한 해결책으로 MultiDataTriggers를 사용해야합니까? – Patrick