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,那是边框。我如何从代码访问图像?
看看这个链接。这描述了如何选择放置在列表框项中的控件。
(或)
一个更好的解决方案可能是:
- 在ViewModel中创建一个布尔属性,初始化为false。
- 在DataTemplate中设置Delete按钮,并将Delete按钮的DataContext设置为ViewModel(每个元素都有自己的DataContext属性,所以你可以单独设置button,它将覆盖ListBox的DataContext)。
- 将删除按钮的可见性属性绑定到ViewModel中定义的布尔属性(使用Converter将bool值改为可见性值)。
- 当用户单击应用程序栏时,将布尔变量设置为true。