我使用StackPanel
和ItemsControl
使用DataTemplate
个对象制作了ItemSource
。
我知道如何从ItemsControl
中的StackPanel
获取对象列表:itemsControl.Items
但是,现在我想让UIElement
与这些Items
相关联。
如果我们有StackPanel
这样的话:
<StackPanel x:Name="BrandButtonsStackPanel" Grid.Row="1" HorizontalAlignment="Center">
<StackPanel.Children>
<ItemsControl ItemsSource="{x:Bind model:BrandMaintainer.VisibleBrands, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="model:BrandInfo">
<Button Tag="{Binding SectionId, Mode=OneWay}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel.Children>
</StackPanel>
我尝试了这种方法,但它给了我一个null
值。我可以在视觉上看到我在运行时生成的所有按钮:
var brandButton = (Button)itemsControl.ContainerFromItem(itemIndex);
有什么想法吗?或者有更好的方法吗?
由于
编辑:这表明UWP存在FindChildren方法。但我没有看到它......
https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.visualtreehelper
答案 0 :(得分:0)
我提出了以下扩展方法
public static IEnumerable<UIElement> GetChildren(this ItemsControl itemsControl)
{
foreach(var item in itemsControl.Items)
{
yield return (UIElement) itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
}
然后您可以像这样调用来访问您想要的按钮
var brandButton = (Button) (itemsControl.GetChildren().ToList()[itemIndex]);
我希望它可以帮到你。
答案 1 :(得分:0)
你可以使用
BrandButtonsStackPanel.FindVisualChildren<Button>();
要获取列表中按钮的所有详细信息,您可以使用此
List<Button> btnList=BrandButtonsStackPanel.FindVisualChildren<Button>().ToList();