C# 隐藏透视选定项目更改UWP上的子网格
我的代码是这样的C# 隐藏透视选定项目更改UWP上的子网格,c#,.net,xaml,uwp,C#,.net,Xaml,Uwp,我的代码是这样的 <Grid Width="Auto" ScrollViewer.VerticalScrollMode="Enabled"> <Pivot x:Name="mainContentPivot" SelectionChanged="mainContentPivot_SelectionChanged" ItemsSource="{x:Bind viewModel.headerElement, Mode=OneWay}" > <
<Grid Width="Auto" ScrollViewer.VerticalScrollMode="Enabled">
<Pivot x:Name="mainContentPivot" SelectionChanged="mainContentPivot_SelectionChanged" ItemsSource="{x:Bind viewModel.headerElement, Mode=OneWay}" >
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="models:UIModel">
<TextBlock Text="{Binding Name, Mode=TwoWay}"/>
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate>
<Grid Name="grd" >
<local1:myusercontrol></local1:myusercontrol>
</Grid>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
</Grid>
单击轴项目时,我希望轴内的网格隐藏
public MyViewPage()
{
DataContext = viewModel;
this.InitializeComponent();
}
private void mainContentPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
PivotItem item = (sender as Pivot).ContainerFromItem((sender as Pivot).SelectedItem) as PivotItem;
var gridView = FindElementInVisualTree<Grid>(item);
gridView.Visibility=Visibility.Collapsed;
}
private T FindElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
return (T)child;
else
{
var result = FindElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
return null;
}
在我看来,所有这些都很好,但当pivot选定项发生更改时,GRI不会隐藏。我做错了什么?使用var gridView=FindElementInVisualTreeitem方法得到的网格;不是将数据模板命名为“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>
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;
}