如何在WPF中从ListViewItem中获取复选框

本文关键字:获取 复选框 ListViewItem 中从 WPF | 更新日期: 2023-09-27 18:20:08

我有一个ListView,它包含多个ListViewItem每个ListViewItem都包含一个复选框:

<ListViewItem>
        <CheckBox IsChecked="{x:Null}" Name="myCheckBx1">
            <StackPanel  Margin="10,0,10,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Stretch">
                <TextBlock Text="Airline"></TextBlock>
            </StackPanel>
        </CheckBox>
    </ListViewItem>
<ListViewItem>
        <CheckBox IsChecked="{x:Null}" Name="myCheckBx2">
            <StackPanel  Margin="10,0,10,0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Stretch">
                <TextBlock Text="Fleet"></TextBlock>
            </StackPanel>
        </CheckBox>
    </ListViewItem>

现在在C#上,我想获取ListView中的所有复选框,我该怎么做?我想做以下事情:

foreach(ListViewItem item in listView) {
    // Get the checkBox here
}

谢谢。

如何在WPF中从ListViewItem中获取复选框

如果没有其他方法,您也可以使用LogicalTreeHelper:

<ListView x:Name="list"> ... </ListView>

在代码背后:

var ref = LogicalTreeHelper.GetChildren(list);

它返回IEnumerable。我认为通过执行此代码,您将获得包含ListViewItems元素的IEnumerable。因此,对于这个集合中的每个元素,使用相同的模式:

var ref = LogicalTreeHelper.GetChildren(list);

您将得到Checkbox对象。然后,您可以从复选框中获得您想要的每个属性。

示例:

foreach (object listView in LogicalTreeHelper.GetChildren(list as FrameworkElement))
{
    foreach (object checkbox in LogicalTreeHelper.GetChildren(obj as FrameworkElement))
    {
        // Some code
    }
}

使用ListViewItem.Content属性

使所有复选框都具有相同的id(bcoz这些复选框在不同的列表项中)。使用以下代码

foreach(ListViewItem item in listView) {
  CheckBox chk=item.FindControl("checkboxid");
}