2016-03-23 12 views
0

Bir DataGrid'im var ve tek tek hücrelerin arka plan renklerini değiştirmek istiyorum. Bu kullanarak, ben de bu ve içeriklerini ortalamak için tüm DataGrid hücreleri setleriGlobal CellStyle tabanlı DataGrid CellStyle

<Style TargetType="DataGrid" x:Key="GlobalCellStyle"> 

    <!-- Cell style --> 
    <Setter Property="CellStyle"> 
     <Setter.Value> 
      <Style TargetType="DataGridCell"> 

       <!-- Single Click Editing --> 
       <EventSetter Event="PreviewMouseLeftButtonDown" 
         Handler="DataGridCell_PreviewMouseLeftButtonDown" /> 
       <EventSetter Event="KeyDown" Handler="DataGridCell_KeyDown" /> 
       <EventSetter Event="GotFocus" Handler="DataGridCell_GotFocus"/> 

       <!--body content datagrid cell vertical centering--> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type DataGridCell}"> 
          <Grid Background="{TemplateBinding Background}"> 
           <ContentPresenter VerticalAlignment="Center" /> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 

sahip bir uygulama çapında ResourceDictionary, örneğin direkt olarak

<DataGridTextColumn.CellStyle> 
    <Style> 
     <Setter Property="Border.Background" Value="{Binding Converter={StaticResource ImportTableBackgroundColorConverter},ConverterParameter=GotName}" /> 
    </Style> 
</DataGridTextColumn.CellStyle> 

Ancak xaml ile bazı arama yaptıktan sonra yapılacak makul basittir Aynı dosyayla birlikte gelen bazı codebehind, hücreleri tek bir tıklamayla düzenleme moduna geçirir. Yeni bir stil belirtmek yerel olarak bunu kaybeder. Globale dayalı yeni yerel stili denemeyi ve belirtmem gerekirse, Can only base on a Style with target type that is base type 'IFrameworkInputElement' istisnasını alırım.

Genel DataGridCell stilini global DataGrid stili dışında getirmeyi denedim ve aynı hatayı aldım. Bu, DataGridCell appearing to implement IFrameworkInputElement.

'a rağmen, hücrenin hangi alanın görüntülendiğini tanımlayabilmesi için ValueConverter'a bir parametre iletiyorum, arka plandaki renk öğelerini genel stiline taşıyamıyorum. tüm satır arka plan birlikte renk değiştiriyor. Ve masaüstümdeki her sütun bildirimi için global stili kopyalamanın yanı sıra muhtemelen codebehind'i de kopyalamak zorunda kalmak, hem başlangıçta hem de daha sonra korumak için oldukça korkunç görünüyor.

Stil kalıtımını nasıl çalıştırabileceğimi ya da ValueConverter çağrıldığında hangi sütunun bulunduğunu bilmek için herhangi biri var mı? Orijinal yöntem başarısız neden ben ikinci eski döküm çünkü DataGridCell açıkça IFrameworkInputElement uygulayan rağmen (anlamıyorum Çok garip

<Style BasedOn="{StaticResource GlobalCellStyle}"> 
    <Setter Property="Border.Background" Value="{Binding Converter={StaticResource ImportTableBackgroundColorConverter},ConverterParameter=GotName}" /> 
</Style> 

cevap

0

, yani:

0

Muhtemelen sadece BasedOn kullanmak gerekir) kalıtsal stil aynı ResourceDictionary içinde miras alınan stil olarak tanımlanmışsa, çalışır.

Bir noktada başka biri için yararlı olabilir.

+0

İstisna neden olan şey budur - bu, yerel stili global olarak temel almaya çalışıyorum. Ama öneri için teşekkürler. –

+1

Hücre stilinin TargetType değerini ayarlayın. – user3690202

+0

Hayır, global DataGridCell stilini global DataGrid stilinin dışına taşımaya çalıştığımda bunu yapmak zorunda kaldı ve aynı şeyi yapıyor. –