c# - 如何在 ListView.SelectionChanged 上获取 SelectedItem 的父项
问题描述
有人知道我如何Ellipse
从以下代码中检索选定的“bgColor”吗?我可以检索Color
,但我需要获取Ellipse
保存它的 。
XAML
<ListView Name="BgColorList" Height="80" Width="850"
ItemsSource="{Binding ColorList}"
ItemContainerStyle="{StaticResource ListViewTransparent}"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.IsHorizontalRailEnabled="True"
IsItemClickEnabled="True"
VerticalAlignment="Bottom"
SelectionChanged="BgColorList_SelectionChanged"
Margin="0,0,0,35">
<ListView.DataContext>
<local2:NamedColors />
</ListView.DataContext>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Center" Margin="0,0,0,0" Height="65" Width="65">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Ellipse Name="bgColor" Grid.Column="0" Height="50" Width="50" Margin="2" VerticalAlignment="Center" Stroke="Transparent" StrokeThickness="1">
<Ellipse.Fill>
<SolidColorBrush Color="{Binding }" />
</Ellipse.Fill>
</Ellipse>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
C# - 我似乎无法在此处找到检索椭圆的方法。
private void BgColorList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListView view = (ListView)sender;
var selected = view.SelectedItem;
Color selectedColor = (Color)view.SelectedItem;
}
解决方案
有ListView
一个ContainerFromItem
方法,它应该给你一个ListViewItem
容器的引用。然后,您可以获得对Ellipse
usingVisualTreeHelper
类的引用:
private void BgColorList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListView view = (ListView)sender;
var selected = view.SelectedItem;
var container = view.ContainerFromItem(selected);
if (container != null)
{
Ellipse ellipse = FindVisualChild<Ellipse>(container);
if (ellipse != null)
{
//...
}
}
}
private static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
return (T)child;
else
{
T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
推荐阅读
- python-3.x - 遍历嵌套列表并跳过行或列
- javascript - 如何通知非活动 PWA 应用程序有关数据库中的新内容?
- php - PHP中的多个文件上传总是丢弃第一个文件
- python - python中巨型列表状对象的长度
- php - 将 Google 图表与 PHP 数据结合使用
- discord.py - discord.py 从消息反应中选择随机用户
- flutter - 为什么 Flutter web 中缺少滚动条
- asp.net - ASP.Net - Base64转换HTML土耳其字符问题
- python - 将 Pandas 数据帧转换为邻接矩阵
- javafx - JavaFX:使用鼠标选择、移动、旋转、绘制和删除矩形