如何访问 ItemsPanelTemplate 中的 ItemsWrapGrid 面板?

Posted

技术标签:

【中文标题】如何访问 ItemsPanelTemplate 中的 ItemsWrapGrid 面板?【英文标题】:How to access the ItemsWrapGrid panel which is placed inside the ItemsPanelTemplate? 【发布时间】:2021-05-05 14:50:19 【问题描述】:

我使用绑定到 ItemsSource 集合的 ItemsControl,并使用 ItemsWrapGrid 控制面板排列项目。但是 ItemsWrapGrid 面板被放置在 ItemsPanelTemplate 中,所以我无法在 c# 后面的代码中访问该元素。

我尝试使用 VisualTreeHelper 方法在可视化树中找到面板。并且在项目面板模板中使用时不检索元素。

<ItemsControl
     x:Name="itemsControl"
     ItemTemplate="TemplateBinding ItemTemplate"
     ItemsSource="TemplateBinding GalleryItemCollection"
     SelectedItem="TemplateBinding SelectedItem">
       <itemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                 <ItemsWrapGrid x:Name="itemsWrapGrid"
                      ItemHeight="Binding Path=ItemHeight"
                      ItemWidth="Binding Path=ItemWidth"
                      MaximumRowsOrColumns="Binding Path=MaximumColumnCount"
                      Orientation="Horizontal" />
             </ItemsPanelTemplate>
       </itemsControl.ItemsPanel>
   </itemsControl>

有人可以帮我如何访问 c# 背后的 itemswrapGrid 代码元素吗?

【问题讨论】:

您尝试从何时何地访问ItemsWrapGrid 【参考方案1】:

您可以在ItemsWrapGrid控件中添加Loaded事件处理程序并将发送者分配给成员变量,然后您可以通过成员变量访问ItemsWrapGrid控件。

例如:

//MainPage.xaml
<ItemsWrapGrid x:Name="itemsWrapGrid" Background="Red" Loaded="itemsWrapGrid_Loaded"
                      ……>  </ItemsWrapGrid>


//MainPage.xaml.cs
private ItemsWrapGrid _itemsWrapGrid;

private void itemsWrapGrid_Loaded(object sender, RoutedEventArgs e)

    _itemsWrapGrid = sender as ItemsWrapGrid;


private void Button_Click(object sender, RoutedEventArgs e)

    _itemsWrapGrid.Background = new SolidColorBrush(Colors.Blue);

【讨论】:

如果你的问题解决了,最好能把答案标记出来,让有同样问题的人可以快速找到解决方案。

以上是关于如何访问 ItemsPanelTemplate 中的 ItemsWrapGrid 面板?的主要内容,如果未能解决你的问题,请参考以下文章

ItemsPanelTemplate 中的模板绑定

带有ScrollHeader和WrapPanel的ListView(ItemsPanel.ItemsPanelTemplate)

ItemsPanelTemplate

WPF 控件模板

WPF 详解模板

WPF模板应用