为什么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;
}
}
答案 0 :(得分:2)
您正在将模板选择器直接分配给模板。您需要使用模板选择器属性。
<l:GenderTemplateSelector x:Key="genderTemplateSelector">
<l:GenderTemplateSelector.MaleTemplate>
<DataTemplate>
<DataGrid RowDetailsTemplateSelector="{StaticResource genderTemplateSelectorNested}"
...
</DataGrid>
</DataTemplate>
</l:GenderTemplateSelector.MaleTemplate>
</l:GenderTemplateSelector>