itemContainer只包含边框

本文关键字:边框 包含 itemContainer | 更新日期: 2023-09-27 18:18:04

我试图在列表的数据模板中创建一个删除按钮,只有当用户单击应用程序栏中的按钮时才会出现。我使用可视化树来访问listcontainer内的元素,但它显示项目容器只有一个边界元素,没有别的这是我的数据模板xaml

 <DataTemplate>
     <StackPanel>
         <Grid>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="auto"/>
                 <ColumnDefinition Width="20"/>
                 <ColumnDefinition Width="auto"/>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="auto" />
             </Grid.ColumnDefinitions>
             <TextBlock Text="{Binding Id}" Grid.Column="0" Height="auto" Width="auto" FontSize="50"/>
             <TextBlock Text="{Binding Title}" Height="auto" Width="auto" FontSize="50" Grid.Column="2" TextWrapping="Wrap"/>
             <Image  Name="del" Source="/Assets/AppBar/delete.png" Grid.Column="4" Tap="delete_Tap" HorizontalAlignment="Stretch" Visibility="{Binding}"/>
         </Grid>
         <TextBlock Text="{Binding Data}" Height="auto" Width="auto" FontSize="30" TextWrapping="Wrap"/>
     </StackPanel>
 </DataTemplate>

这是可视树代码

private void ApplicationBarIconButton_Click(object sender, EventArgs e)
{
    foreach (var items in notes.Items)
    {
        var x = notes.ItemContainerGenerator.ContainerFromItem(items);
        var p = VisualTreeHelper.GetChildrenCount(x);
        MessageBox.Show(p.ToString());
    }
}

getchildrencount总是1,那是边框。我如何从代码访问图像?

itemContainer只包含边框

看看这个链接。这描述了如何选择放置在列表框项中的控件。

(或)

一个更好的解决方案可能是:

  1. 在ViewModel中创建一个布尔属性,初始化为false。
  2. 在DataTemplate中设置Delete按钮,并将Delete按钮的DataContext设置为ViewModel(每个元素都有自己的DataContext属性,所以你可以单独设置button,它将覆盖ListBox的DataContext)。
  3. 将删除按钮的可见性属性绑定到ViewModel中定义的布尔属性(使用Converter将bool值改为可见性值)。
  4. 当用户单击应用程序栏时,将布尔变量设置为true。