WinRT-创建具有特定ItemContainerStyle的自定义ListView控件

本文关键字:自定义 ListView 控件 ItemContainerStyle 创建 WinRT- | 更新日期: 2023-09-27 18:26:14

我为Windows Phone 8.1创建了一个WinRT类库,该库具有不同的可重用UI控件。现在,我想创建一个具有默认ItemContainerStyle的自定义ListView控件。这样,我就不需要在所有不同的项目中设置ItemContainerStyle。

因此,我创建了两个文件:

  • 继承自ListViewCustomListView
  • 具有CustomListViewItemStyle风格、目标类型ListViewItemCustomListView.xaml资源字典。该文件将被合并到CCD_ 8资源字典中

在CustomListView的contstructor中,我设置了ItemContainerStyle:

ItemContainerStyle = Resources["CustomListViewItemStyle"] as Style;

这不起作用,我得到以下错误:WinRT信息:找不到具有给定密钥的资源

此外,将样式从我的自定义资源字典移到generic.xaml也无济于事。

我做错了什么?

编辑

我的主题/Generic.xaml:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XYZ.Apps.UI">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/TabPanel/TabPanel.xaml" />
        <ResourceDictionary Source="/CustomListView/CustomListView.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

WinRT-创建具有特定ItemContainerStyle的自定义ListView控件

我明白你想要什么。作为一个后续的例子,如果控件团队将HorizontalContentAlignment默认为Stretch,而不是像现在这样的Left,我会很高兴。创建CustomListView可以做到这一点。

首先,让我们谈谈你目前的做法。简而言之,完美。但是,关于模板化控件,您可能不了解一些地方,那就是generic.xaml中的样式是自动应用的,如果您在样式中执行,则不需要在代码后面设置样式。

希望你有这样的东西:

<Style Target='ListView'>
    <Setter Property='ItemContainerStyle'>
        <Setter.Value>
            <Style Target='ListViewItem'>
                <Setter Property='HorizontalContentAlignment' Value='Stretch' />
            </Style>
        </Setter.Value>
    </Setter>
</Style>

当然,这只是快速键入,而不是精确的语法,但希望你能理解它。上面的代码将放在themes/generic.xaml中,平台会在应用程序、页面或控件(按顺序)范围内的任何内容之前应用它。

记住

  1. 只有一个Target=ListView样式
  2. 在这种情况下不包括x:Key

这是有效的。我可以验证这一点,因为我做到了。

现在,回答你的问题。为什么你的不起作用?我认为你的风格之所以不起作用,是因为它没有正确地合并到generic.xaml中。作为一个快速测试,你可以把你的风格手动复制到generic.xsaml中,看看这是否起作用。如果是这样,那么合并语法就是问题所在。

在没有更多信息的情况下,这是我能为您的问题做的最好的调试。值得告诉你这是有效的。我想,这就是你需要继续的希望。你的问题可能是一些微妙的语法错误或合并,我不能确定。但你会得到的。

祝你好运。

它没有找到应用程序范围的资源。试试这个

App.Current.Resources["CustomListViewItemStyle"] as Style