2011-02-13 110 views
22

我有扩展DataGrid的自定义控件。它被称为ExtendedDataGrid。我想为ExtendedDataGrid提供与DataGrid s样式相同的样式,但它会更改模板。我试过这样的事情:如何基于默认的DataGrid风格创建样式?

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

但它说没有找到资源。

所以我尝试:

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

但它也不起作用......所以,我该怎么办?

回答

44

好谜团解开:)

我上面居然第一代码工作:

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

我认为这是不工作becase的VS(或ReSharper的)在我的代码显示错误,指出资源没有找到...在VS(或Resharper)中的错误:(

2

如果创建一个风格与 TargetType的属性和它的基础上 另一个风格,也定义了 TargetType的属性,目标类型派生的风格的 必须相同 的或从派生基本样式的 类型。

您的网格确实从DataGrid继承,对吗?

+0

是的,它的确解决了问题,请参阅我上面的回答:) – drasto 2011-02-13 18:27:41

+0

想知道如果不是这样,那么因为你注意到它可以工作。 – 2011-02-13 18:30:52