【问题标题】:UWP GridView Static Resource not found未找到 UWP GridView 静态资源
【发布时间】:2019-11-28 08:53:17
【问题描述】:

我正在开发一个带有 GridView 的 UWP 项目,我希望根据数据动态填充不同的项目模板。

MainPage.xaml:

<GridView HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
          Margin="80, 40, 60, 40" BorderThickness="0"
          ItemsSource="{x:Bind Favorites}"
          ItemTemplateSelector="{StaticResource ItemTemplateSelector}">
    <GridView.ItemContainerStyle>
        <Style TargetType="GridViewItem">
            <Setter Property="Margin" Value="0, 0, 0, 32"/>
        </Style>
    </GridView.ItemContainerStyle>
</GridView>

<Page.Resources>
    <local:ItemTemplateSelector x:Key="ItemTemplateSelector"
                                   Template1="{StaticResource Template1}"
                                   Template2="{StaticResource Template2}">

    </local:ItemTemplateSelector>
    <DataTemplate x:Key="Template1" x:DataType="data:Test1" >
        <local:Template1 HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></local:Template1>
    </DataTemplate>
    <DataTemplate x:Key="Template2" x:DataType="data:" >
        <local:Template2 HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></local:Template2>
    </DataTemplate>
</Page.Resources>

ItemTemplateSelector.cs:

public class ItemTemplateSelector: DataTemplateSelector
{
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        if (item is Test1)
        {
            return Template1;
        }
        else if (item is Test2)
        {
            return Template2;
        }
        else
        {
            return base.SelectTemplateCore(item);
        }
    }

    public DataTemplate Template1 { get; set; }
    public DataTemplate Template2 { get; set; }
}

问题是当我尝试运行应用程序时出现以下错误:

Windows.UI.Xaml.Markup.XamlParseException: 'The text associated with this error code could not be found.
Cannot find a Resource with the Name/Key ItemTemplateSelector [Line: 66 Position: 19]'

【问题讨论】:

    标签: c# gridview uwp itemtemplateselector


    【解决方案1】:

    您应该在使用前定义资源。尝试在页面资源中的 ItemTemplateSelector 之前定义 Template1 和 2。并且资源应该在使用前定义。

    <Page.Resources>
        <DataTemplate x:Key="Template1" >
            <local:Template1 HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></local:Template1>
        </DataTemplate>
        <DataTemplate x:Key="Template2"  >
            <local:Template2 HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></local:Template2>
        </DataTemplate>
    
        <local:ItemTemplateSelector x:Key="ItemTemplateSelector"
                                   Template1="{StaticResource Template1}"
                                   Template2="{StaticResource Template2}">
    
        </local:ItemTemplateSelector>
    </Page.Resources>
    
    <Grid>
        <GridView HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
          Margin="80, 40, 60, 40" BorderThickness="0"
          ItemTemplateSelector="{StaticResource ItemTemplateSelector}">
            <GridView.ItemContainerStyle>
                <Style TargetType="GridViewItem">
                    <Setter Property="Margin" Value="0, 0, 0, 32"/>
                </Style>
            </GridView.ItemContainerStyle>
        </GridView>
    </Grid>
    

    我在https://github.com/lindexi/lindexi_gd/commit/ca49c76909fca81fb6518247a732219bb5f0d9a6写代码

    【讨论】:

    • 感谢您的帮助!现在我正在努力向模板显示数据...... Template1 中的 DataContext 为空,因此除了空模板之外什么都没有显示。我的用户控件中有这个:this.DataContextChanged += (s, e) => Bindings.Update();
    • 你应该定义你的gridview的Itemssource?!
    • @thezapper 在页面中
    • 您是否在页面中设置了Itemsource?没找到。不过我会尝试添加这个
    猜你喜欢
    • 2019-04-30
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多