我有一个ContentDialog,它有一个ListView。这个ListView's DataTemplate包含一个Grid,而这个Grid有一个Button。代码是这样的:
<ContentDialog x:Name="DownloadListDialog" x:FieldModifier="public" Grid.Column="1">
<ListView Name="AssetsListView" IsItemClickEnabled="False" Grid.Row="1" SelectionMode="Single" MaxHeight="500" ItemsSource="{x:Bind _viewModel.Assets, Mode=OneWay}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
...
...
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate x:DataType="viewModel:AssetViewModel">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="{x:Bind name}"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind lblFileSize}"/>
<TextBlock Text="{x:Bind contentSize, Mode=OneWay}"/>
<TextBlock Text="{x:Bind contentUrl}" Visibility="Collapsed"/>
</StackPanel>
</StackPanel>
<Button Content="Download" Click="Button_Click" HorizontalAlignment="Right" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentDialog>下面是我的按钮单击事件处理程序:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var grid = VisualTreeHelper.GetParent(sender as Button) as Grid;
...
...
}问题是变量VisualTreeHelper.GetParent(sender as Button) as Grid总是在我的PC上返回null。但是,当我在我的移动设备上部署时,同样的代码工作得很好(即变量grid被分配了正确的值)。
更新:这里是我的Live,它确认按钮有一个父网格。

App min版本: build 14393 App目标版本: Build 15063 PC windows版本: Build 17134 (版本1803)
注意:我尝试过将App版本更改为1803,但问题仍然存在。
发布于 2018-05-29 07:18:23
正如我从一个不同的问题中了解到的,有几种方法可以获得VisualTreeHelper的父级。可能是在您的手机或PC上,在后台,不同的东西被加载,以便您可以找到网格对象的位置改变。
您可以检查这个答案,作为我上面所述的参考:FrameworkElement.Parent and VisualtreeHelper.GetParent behaves differently
https://stackoverflow.com/questions/50507068
复制相似问题