【发布时间】:2011-06-12 07:03:40
【问题描述】:
每个ItemsControl 都将其内容存储在 Panel 中,对吗?我们可以像这样指定要在 XAML 中使用的面板:
<ListView Name="LView">
<ListView.ItemsPanel>
<ItemsPanelTemplate >
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
我的问题是如何获取在特定 ItemsControl 的 ItemsPanel 属性(类型为 ItemsPanelTemplate)中使用的 Panel 的实例?例如上面的代码示例中的ListView 调用LView?
我不能使用Name 属性或x:Name,这必须适用于任何ItemsControl,即使是使用默认ItemsPanel 的那些。
如果不清楚请发表评论,我认为有非常简单的解决方案。如果它看起来很复杂,那只是因为我无法正确解释它。
【问题讨论】:
-
您想从哪里获取该实例?是来自
ItemsControl还是来自其中的某个项目模板? -
完全来自
ItemsPanelTemplate。我绝对不想从项目模板中获取它。 -
我是否正确理解了您的问题,还是您正在寻找其他内容?
-
@Meleak:在pivotnig 的回答之后,我能够找到一些解决方案——我所需要的只是有一个VisualTreeHelper 类。我的代码看起来与您提供的非常相似,我不确定差异 - 我不确定我的代码是否总是有效(可能存在一些我不知道的泄漏......)。一段时间后我会接受其中一个答案。
标签: c# .net wpf controls custom-controls