Сетка, которую вы получили с помощью метода var gridView = FindElementInVisualTree<Grid>(item);
, не является элементом root, который называет grd шаблона данных, поэтому он вызвал неожиданное поведение. Если вы все еще хотите просмотреть визуальное дерево, чтобы получить сетку, вы можете попробовать использовать следующий метод:
PivotItem item = (sender as Pivot).ContainerFromItem((sender as Pivot).SelectedItem) as PivotItem;
var itemsGrid = item.ContentTemplateRoot as Grid;
itemsGrid.Visibility = Visibility.Collapsed;
Однако, как правило, мы рекомендуем использовать привязку для достижения этой цели. Вы можете определить свойство, которое представляет видимость в вашей UIModel, чтобы связать его с видимостью сетки. При выборе элемента измените свойство на Свернутый.
.xaml:
<Pivot x:Name="mainContentPivot" SelectionChanged="mainContentPivot_SelectionChanged" ItemsSource="{x:Bind viewModel.headerElement, Mode=OneWay}" >
......
<Pivot.ItemTemplate>
<DataTemplate>
<Grid Name="grd" Visibility="{Binding isVisual}">
<local:myusercontrol></local:myusercontrol>
</Grid>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
.cs:
public class UIModel
{
public string Name { get; set; }
public Visibility isVisual { get; set; }
}
private void mainContentPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
PivotItem item = (sender as Pivot).ContainerFromItem((sender as Pivot).SelectedItem) as PivotItem;
(item.DataContext as UIModel).isVisual = Visibility.Collapsed;
}