如何访问 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 面板?的主要内容,如果未能解决你的问题,请参考以下文章
带有ScrollHeader和WrapPanel的ListView(ItemsPanel.ItemsPanelTemplate)