在选定的数据透视表上隐藏子网格项目更改UWP

问题描述 投票:0回答:1

我的代码就是这样

<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;
    }

对我来说,一切都很好,但是当枢轴选择的项目更改时,Gris不会隐藏。我在这里错了吗?

c# .net xaml uwp
1个回答
0
投票

您使用方法var gridView = FindElementInVisualTree<Grid>(item);获得的网格不是命名数据模板的'grd'的根元素,因此它导致了意外的行为。如果您仍然想遍历可视树以获取Grid,则可以尝试使用以下方法。

PivotItem item = (sender as Pivot).ContainerFromItem((sender as Pivot).SelectedItem) as PivotItem;
var itemsGrid = item.ContentTemplateRoot as Grid;
itemsGrid.Visibility = Visibility.Collapsed;
© www.soinside.com 2019 - 2024. All rights reserved.