![](/img/trans.png)
[英]How do I get the “selected” instance of an ItemsControl DataTemplate?
[英]How do you get UIElements from ItemsControl using a DataTemplate?
我有一個使用ItemSource
對象的ItemsControl
和DataTemplate
制成的StackPanel
。
我知道如何從StackPanel
的ItemsControl
中獲取對象列表: itemsControl.Items
但是,現在我想獲取與這些Items
相關聯的UIElement
。
如果我們有一個像這樣的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/zh-cn/uwp/api/windows.ui.xaml.media.visualtreehelper
我想出了以下擴展方法
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]);
希望對您有幫助。
您可以使用BrandButtonsStackPanel.FindVisualChildren<Button>();
要獲取列表中按鈕的所有詳細信息,可以使用此按鈕
List<Button> btnList=BrandButtonsStackPanel.FindVisualChildren<Button>().ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.