【问题标题】:WPF change ItemsPanel and ItemTemplate in code behindWPF 在后面的代码中更改 ItemsPanel 和 ItemTemplate
【发布时间】:2010-04-10 15:08:19
【问题描述】:

我在 XAML 中有以下列表:

<ListView Name="ListViewBack"
          Margin="3"
          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          ItemsPanel="{StaticResource IconListPanelTemplate}"
          ItemTemplate="{StaticResource IconListDataTemplate}">
</ListView>

现在我希望能够将 ItemsPanel 和 ItemTemplate 从 List 更改为 Grid 版本。我已经使用以下代码进行了尝试:

ListViewBack.ItemsPanel = Resources["IconGridPanelTemplate"] as ItemsPanelTemplate;
ListViewBack.ItemTemplate = Resources["IconGridDataTemplate"] as DataTemplate;

但是执行时什么都没有发生。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: wpf itemtemplate itemspanel


    【解决方案1】:

    您的明显问题是您使用的是Resources[] 而不是FindResource()。一般来说,Resources[] 仅在您的资源在 this.Resources 字典中而不在其他位置时才有效。

    这就是我将如何重写你的两行代码:

    ListViewBack.ItemsPanel = (ItemsPanelTemplate)ListViewBack.FindResource("IconGridPanelTemplate");
    ListViewBack.ItemTemplate = (DataTemplate)ListViewBack.FindResource("IconGridDataTemplate");
    

    实际上,我更可能为此使用触发器或使用 DynamicResource 和交换资源字典,但那是另一回事了。

    请注意,我调用了ListViewBack.FindResource() 而不仅仅是FindResource()。这是在低于 UserControl 级别的资源字典中重新定义 IconGridPanelTemplate 的情况。如果这永远不可能,您只需致电FindResource()

    【讨论】:

      【解决方案2】:

      您需要设置 ListView.View 的样式,而不是 ListView 本身。 查看ViewBase Class 的文档以获取示例。

      【讨论】:

        猜你喜欢
        • 2010-12-30
        • 2023-04-02
        • 1970-01-01
        • 2011-11-11
        • 2016-05-02
        • 2015-12-05
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多