Ras*_*sto 23 .net c# wpf controls custom-controls
每个ItemsControl人的内容都存储在Panel中吗?我们可以指定要在XAML中使用的面板,如下所示:
<ListView Name="LView">
<ListView.ItemsPanel>
<ItemsPanelTemplate >
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在特定Panel的ItemsPanel属性(类型ItemsPanelTemplate)中使用它的实例ItemsControl?例如从上面的代码示例ListView调用LView?
我不能使用Name属性,或者x:Name这必须适用于任何ItemsControl使用默认值的人ItemsPanel.
如果不清楚请评论,我认为有非常简单的解决方案.如果它似乎很复杂,那只是因为我无法正确解释它.
Fre*_*lad 17
这有点棘手,因为您不知道Panel的名称,所以您不能使用FindName等.这适用于大多数情况下ItemsPresenter存在
private Panel GetItemsPanel(DependencyObject itemsControl)
{
ItemsPresenter itemsPresenter = GetVisualChild<ItemsPresenter>(itemsControl);
Panel itemsPanel = VisualTreeHelper.GetChild(itemsPresenter, 0) as Panel;
return itemsPanel;
}
Run Code Online (Sandbox Code Playgroud)
GetVisualChild的实现
private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
Run Code Online (Sandbox Code Playgroud)
但是,并不总是使用ItemsPanel.见这个答案由伊恩·格里菲思为一个伟大的解释.
| 归档时间: |
|
| 查看次数: |
10113 次 |
| 最近记录: |