gpt4 book ai didi

wpf - ListBoxItem.Parent 不返回任何内容,也无法通过 VisualTreeHelper.GetParent 获取它

转载 作者:行者123 更新时间:2023-12-04 13:47:13 30 4
gpt4 key购买 nike

如何提取 ListBoxItem 的父容器?
在下面的例子中,我可以去到 ListBoxItem,比它更高,我什么都没有:

<ListBox Name="lbAddress">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Click="Button_Click"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Private Sub Button_Click(sender As Button, e As RoutedEventArgs)
Dim lbAddress = GetAncestor(Of ListBox) 'Result: Nothing
End Sub
Public Shared Function GetAncestor(Of T)(reference As DependencyObject) As T
Dim parent = GetParent(reference)

While parent IsNot Nothing AndAlso Not parent.GetType.Equals(GetType(T))
parent = GetAncestor(Of T)(parent)
End While

If parent IsNot Nothing Then _
Return If(parent.GetType Is GetType(T), parent, Nothing)

Return Nothing
End Sub

Public Function GetParent(reference As DependencyObject) As DependencyObject
Dim parent As DependencyObject = Nothing

If TypeOf reference Is FrameworkElement Then
parent = DirectCast(reference, FrameworkElement).Parent
ElseIf TypeOf reference Is FrameworkContentElement Then
parent = DirectCast(reference, FrameworkContentElement).Parent
End If

Return If(parent, VisualTreeHelper.GetParent(reference))
End Function

更新

这就是发生的情况(注意“父”变量保持为空):

This is how it looks like

最佳答案

很明显有些东西正在从 lbAddress.ItemsSource 中删除一个项目在按钮单击期间。问题是,什么 ?仔细看看你发布的图片就会发现答案。这是您代码中的错误:

My.Context.DeleteObject(context)
My.Context.SaveChanges()

...

btn.GetVisualAncestor(...)

前两行更新您的数据模型。这会立即从可视化树中删除 ListBoxItem。当您稍后调用 GetVisualAncestor 以查找 ListBox 时,它会失败,因为 ListBoxItem 不再具有任何类型的父项。

我相信现在的解决方案对您来说是显而易见的:只需找到 ListBox 祖先 之前 你从数据模型中删除数据,你会很高兴。

关于wpf - ListBoxItem.Parent 不返回任何内容,也无法通过 VisualTreeHelper.GetParent 获取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633109/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com