WinRT - 使用特定的ItemContainerStyle

时间:2015-12-09 18:13:04

标签: c# listview windows-runtime windows-phone-8.1 winrt-xaml

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

所以,我创建了两个文件:

  • 继承自CustomListView
  • ListView
  • CustomListView.xaml资源字典,其格式为CustomListViewItemStyle,目标类型为ListViewItem。此文件将合并到Themes/generic.xaml资源字典中。

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

ItemContainerStyle = Resources["CustomListViewItemStyle"] as Style;

这不起作用,我收到以下错误: WinRT-Information:无法找到具有给定密钥的资源。

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

我做错了什么?

修改

My Themes / 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>

2 个答案:

答案 0 :(得分:1)

我明白你想要什么。作为一个后续的例子,我很乐意,如果控制团队将Horizo​​ntalContentAlignment默认为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中,平台将在应用app,page或control(按此顺序)范围内的任何内容之前应用它。

记住

  1. 只有一个Target = ListView样式
  2. 在这种情况下不要包含x:Key
  3. 这很有效。我可以验证这一点,因为我这样做。

    现在,问你的问题。你为什么不工作?我的想法为什么你的不工作是因为它没有正确地合并到generic.xaml。作为一个快速测试,采取你的风格,只需手动将其复制到generic.xaml。看看是否有效。如果是,那么你的合并语法就是问题。

    如果没有更多信息,这是我可以对您的问题进行的最佳调试。值得告诉你的是,这是有效的。我想,这是你需要继续的希望。你的问题可能是一些微妙的语法错误或合并,我无法确定。但是你会得到它。

    祝你好运。

答案 1 :(得分:-1)

找不到应用广泛的资源。试试这个

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