为什么我不能将DataGrid与RowDetails静态资源嵌套在另一个内部?

时间:2015-09-09 15:39:25

标签: c# wpf datagrid

为什么GenderTemplateSelectorNested类会返回像它的父级一样的DataTemplate?为简洁起见,我简化了代码。

错误

  

未处理的类型异常   ' System.Windows.Markup.XamlParseException'发生在   PresentationFramework.dll

     

其他信息:' SchdUtil.GenderTemplateSelectorNested'不是一个   属性的有效值' RowDetailsTemplate'。

XAML

<Window.Resources>

<l:GenderTemplateSelector x:Key="genderTemplateSelector">
    <l:GenderTemplateSelector.MaleTemplate>
        <DataTemplate>
            <DataGrid RowDetailsTemplate="{StaticResource genderTemplateSelectorNested}"
             ...
            </DataGrid>
        </DataTemplate>
    </l:GenderTemplateSelector.MaleTemplate>
</l:GenderTemplateSelector>

<l:GenderTemplateSelectorNested x:Key="genderTemplateSelectorNested">
    <l:GenderTemplateSelector.MaleTemplateNested>
        <DataTemplate>
            ...
        </DataTemplate>
    </l:GenderTemplateSelector.MaleTemplateNested>
</l:GenderTemplateSelectorNested>

</Window.Resources>

<DataGrid RowDetailsTemplate="{StaticResource genderTemplateSelector}"
    ...
</DataGrid>

代码隐藏

public class GenderTemplateSelector : DataTemplateSelector
{
    public DataTemplate MaleTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        return MaleTemplate;
    }
}

public class GenderTemplateSelectorNested : DataTemplateSelector
{
    public DataTemplate MaleTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        return MaleTemplate;
    }
}

1 个答案:

答案 0 :(得分:2)

您正在将模板选择器直接分配给模板。您需要使用模板选择器属性。

<l:GenderTemplateSelector x:Key="genderTemplateSelector">
    <l:GenderTemplateSelector.MaleTemplate>
        <DataTemplate>
            <DataGrid RowDetailsTemplateSelector="{StaticResource genderTemplateSelectorNested}"
             ...
            </DataGrid>
        </DataTemplate>
    </l:GenderTemplateSelector.MaleTemplate>
</l:GenderTemplateSelector>