WPF

2011-12-21 18 views
13

'daki stil değerlerini geçersiz kılmanın doğru yolu WPF'de DataGrid hücre stilini düzenlemek istiyorum.WPF

<SolidColorBrush x:Key="{x:Static DataGrid.FocusBorderBrushKey}" Color="#FF000000"/> 
<Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="BorderBrush" Value="Transparent"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
      <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
     </Trigger> 
     <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
      <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Ama sadece istiyorum: - Yani kullanarak Expression Blend Birazdan gidip Nesneler ve Timeline >> DataGrid >> Ek Şablonlar düzenleyin >> Düzenleme CellStyle >> İşte
neyi sayfada görünen ne bir Kopyala düzenleme dolgu ve arka planı değiştirmek için. Bunun yerine, hücre şablonu da dahil olmak üzere 25 satırlık kod verdi! Bir şeyi özlüyorum, sadece iki maddeyi değiştirmek istediğimde gereksiz yere fazladan kod getirmek zorunda kalmadan bunun gibi öğeleri şekillendirmenin daha iyi bir yolu var mı?

cevap

30

atın: Yayınladığınız varsayılan şablon dayanmaktadır aşağıdaki

<Style x:Key="CenterAlignedColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}" 
     BasedOn="{StaticResource {x:Type DataGridColumnHeader}}"> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
</Style> 
+1

Müthiş özelliği: HorizontalContentAlignment özelliğini geçersiz kılar. Tarzımı bozmadan, bana bir tonluk iş yapma tarzımı kurtarmam için bana yardımcı oldu. Teşekkürler! –

2

WPF'de denetim şablonlarını geçersiz kılmak, şablonu tamamen değiştirmenizi gerektirir. Şablonun sadece bir yönünü değiştirmek isteyebilirsiniz, ancak bunun sonucu, Şablonun geri kalanının bir kopyasını geçersiz kılacak şekilde bir dökümün dışa aktarılmasıdır. Hücreyi uygun şekilde geçersiz kıldığınızdan emin olun (başka bir yol olduğundan emin değilim). Bazı kontroller (ListView akla gelir) tüm kontrol şablonunu geçersiz kılmadan veri şablonlarını değiştirmenize izin verir, ancak istediğinizi veya DataGrid ile yapılabileceğinden emin değilim.

bunun cevabını bakınız: Replace part of default template in WPF

2

sen ne yapmak istediğinizi yapmak için, genellikle sadece bir tarzda arka plan ve Doldurma özelliklerini ayarlayabilirsiniz olacaktır:

<Style TargetType="DataGridCell"> 
    <Setter Property="Padding" Value="10" /> 
    <Setter Property="Background" Value="Green" /> 
</Style> 

Ancak bu durumda öyle görünüyor

DataGridCell için varsayılan denetim şablonunun dolgu değerini görmezden geldiğinden, bunu yerine getirmeyen bir uygulama ile değiştirmeniz gerekir. " BasedOn" Örneğin aşağıdaki stil her şeyi alır

Styles için öznitelik ... dan DataGridColumnHeader ve sadece

<Style TargetType="DataGridCell"> 
    <Setter Property="Padding" Value="10" /> 
    <Setter Property="Background" Value="Green" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type DataGridCell}"> 
      <Border BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        Background="{TemplateBinding Background}" 
        SnapsToDevicePixels="True"> 
       <ContentPresenter 
        Margin="{TemplateBinding Padding}" <!-- this bit does the padding --> 
        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      </Border> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style>