2011-02-13 13 views
22

Mam niestandardową kontrolę, która rozszerza DataGrid. Nazywa się ExtendedDataGrid. Chcę nadać styl dla stylu ExtendedDataGrid, który jest taki sam, jak styl DataGrid, z wyjątkiem zmiany szablonu. Próbowałem coś takiego:Jak utworzyć styl na podstawie domyślnego stylu DataGrid?

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}"> 
    <Setter Property="Template"> 
    ... 
    </Setter> 
</Style> 

Ale mówi, że zasób nie został znaleziony.

Więc staram:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {ComponentResourceKey ResourceId=DataGridStyle, TypeInTargetAssembly={x:Type DataGrid}}}"> 
    <Setter Property="Template"> 
    ... 
    </Setter> 
</Style> 

Ale to też nie działa ... Więc co mam zrobić?

Odpowiedz

44

Dobrze tajemnica jest rozwiązany :)

Mój pierwszy kod powyżej faktycznie działa:

<Style TargetType="{x:Type MyControls:ExtendedDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}"> 
    <Setter Property="Template"> 
    ... 
    </Setter> 
</Style> 

Myślałem, że to nie działa becase VS (lub Resharper) wykazała błąd w moim kodu mówiąc, że zasób jest nie znaleziono ... Błąd w VS (lub Resharper) :(

+0

-.- Myślisz, że tak, czy używasz projektanta? –

+0

Tak, używam go, dlaczego pytasz? – drasto

+8

Ponieważ jest to bzdura, której nikt nie powinien używać, chyba że ma naprawdę dobrą wymówkę (nie wiedząc, jak napisać XAML to nie jest jeden: P), często twierdzi, że coś nie działa, podczas gdy faktycznie to robi. –

2

Jeśli tworzysz styl z własności TargetType i oprzeć go na inny styl, który określa również właściwość TargetType, typ docelowy stylu pochodzącego musi być taka sama jako albo pochodzić z typ stylu bazowego .

Twoja siatka dziedziczy po DataGrid, prawda?

+0

Tak, to prawda Problem rozwiązany, zobacz moją odpowiedź powyżej :) – drasto

+0

Zastanawiasz się, co może być, jeśli nie, ponieważ jak zauważyłeś, to działa. –

Powiązane problemy