UWP - 无法访问 ItemsPanel 中的值
UWP - can't access values in ItemsPanel
我有以下 XAML 但我似乎无法访问相应 .CS 文件中 ItemsWrapGrid 的内容 - 谁能告诉我我应该做什么(这是后面的代码和 xaml) :
private void wifiTapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine("in here " + e.GetType().ToString());
ItemsWrapGrid wg = (ItemsWrapGrid) sender;
Debug.WriteLine(e.OriginalSource.ToString());
foreach (Control c in wg.Children)
{
Debug.WriteLine("Control " + c.Name);
}
Debug.WriteLine("leaving ");
}
<GridView VerticalAlignment="Top" ItemsSource="{Binding nets}" x:Name="GDView" ItemClick="gdViewClick" >
<GridView.ItemTemplate>
<DataTemplate x:Name="configDataTemplate" x:DataType="data:wifiNets" >
<StackPanel Height="300" Width="350" Margin="10" Name="dtStackPanel" >
<Image Source="Assets\wifiIcon.png" Width="200" Height="201" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name" Margin="0,0,10,0"/>
<TextBlock Name="configSSID" Width="auto" Text="{x:Bind NetSSID}" FontSize="24" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Strength" Margin="0,0,10,0"/>
<!--<TextBlock Name="configStrength" Width="auto" Text="{x:Bind NetSSIDStrength}" FontSize="20" />-->
<ProgressBar Name="configProgBar" Maximum="5" Value="{x:Bind NetSSIDStrength}" Foreground="Green" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Connected" Margin="0,0,10,0"/>
<TextBlock Name="configConnectedTo" Text="{x:Bind NetSSIDConnected}" FontSize="20"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid MaximumRowsOrColumns="10" Orientation="Vertical" Tapped="wifiTapped" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
需要说明的是,当我 运行 这个时,我有三项数据(所以它正在工作) - 但我希望能够做的是点击这三项数据中的任何一项项,并能够识别数据面板中的各个控件及其值。
提前致谢,这让我抓狂。
保罗.
在您的 GridView 上将 IsItemClickEnabled
设置为 true,并挂接到 GridView 本身的 ItemClick 事件。从事件参数中,您可以获得发件人(很可能是 GridViewItem
UI 元素本身,您的 DataTemplate
内容是其中的子元素),以及 ClickedItem
,它是数据模板的绑定数据上下文——在你的例子中是 data:wifiNets
的实例——如果你的绑定工作意味着你实际上根本不需要查看 VisualTree。
如果出于某种原因你想通过 VisualChildren 递归任何 ItemsControl 的项目,请使用 ItemsControl 上的 ContainerFromIndex
或 ContainerFromItem
方法来获取托管每个数据模板实例的 ItemContainer - 尽管我不建议这样做,除非你也确实需要。理想情况下,您不应该经常需要手动拖网可视化树。
我有以下 XAML 但我似乎无法访问相应 .CS 文件中 ItemsWrapGrid 的内容 - 谁能告诉我我应该做什么(这是后面的代码和 xaml) :
private void wifiTapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine("in here " + e.GetType().ToString());
ItemsWrapGrid wg = (ItemsWrapGrid) sender;
Debug.WriteLine(e.OriginalSource.ToString());
foreach (Control c in wg.Children)
{
Debug.WriteLine("Control " + c.Name);
}
Debug.WriteLine("leaving ");
}
<GridView VerticalAlignment="Top" ItemsSource="{Binding nets}" x:Name="GDView" ItemClick="gdViewClick" >
<GridView.ItemTemplate>
<DataTemplate x:Name="configDataTemplate" x:DataType="data:wifiNets" >
<StackPanel Height="300" Width="350" Margin="10" Name="dtStackPanel" >
<Image Source="Assets\wifiIcon.png" Width="200" Height="201" />
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name" Margin="0,0,10,0"/>
<TextBlock Name="configSSID" Width="auto" Text="{x:Bind NetSSID}" FontSize="24" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Strength" Margin="0,0,10,0"/>
<!--<TextBlock Name="configStrength" Width="auto" Text="{x:Bind NetSSIDStrength}" FontSize="20" />-->
<ProgressBar Name="configProgBar" Maximum="5" Value="{x:Bind NetSSIDStrength}" Foreground="Green" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Connected" Margin="0,0,10,0"/>
<TextBlock Name="configConnectedTo" Text="{x:Bind NetSSIDConnected}" FontSize="20"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid MaximumRowsOrColumns="10" Orientation="Vertical" Tapped="wifiTapped" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
需要说明的是,当我 运行 这个时,我有三项数据(所以它正在工作) - 但我希望能够做的是点击这三项数据中的任何一项项,并能够识别数据面板中的各个控件及其值。
提前致谢,这让我抓狂。 保罗.
在您的 GridView 上将 IsItemClickEnabled
设置为 true,并挂接到 GridView 本身的 ItemClick 事件。从事件参数中,您可以获得发件人(很可能是 GridViewItem
UI 元素本身,您的 DataTemplate
内容是其中的子元素),以及 ClickedItem
,它是数据模板的绑定数据上下文——在你的例子中是 data:wifiNets
的实例——如果你的绑定工作意味着你实际上根本不需要查看 VisualTree。
如果出于某种原因你想通过 VisualChildren 递归任何 ItemsControl 的项目,请使用 ItemsControl 上的 ContainerFromIndex
或 ContainerFromItem
方法来获取托管每个数据模板实例的 ItemContainer - 尽管我不建议这样做,除非你也确实需要。理想情况下,您不应该经常需要手动拖网可视化树。