UWP Загрузить GridView с выбранным элементом. - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть меню по центру экрана, меню содержит Grid с GridView. Содержимое упомянутого GridView генерируется с помощью кода, и когда один из GridViewItems щелкается, пустой фрейм загружает некоторую информацию, и меню перемещается, так что все остается в центре. Я обрабатываю движение с помощью «связанных анимаций». Дело в том, что в этом решении нажатый GridViewItem возвращается в «нормальное» состояние.

Есть ли способ, которым я передаю информацию о том, какой из элементов был нажат, чтобы он оставался в этом состоянии, или чтобы загрузить GridViewItem в определенном состоянии, чтобы он выглядел так, как если бы он оставался выбранным?

Это то, что у меня есть:

MainPage.xaml

<Grid>
   <Frame x:Name="ventanaMenuPrincipal"/>
</Grid>

MainPage.xaml.cs

 public sealed partial class MainPage : Page
{
    private ConnectedAnimation animation;
    private List<Seccion> Secciones;

    public MainPage()
    {
        this.InitializeComponent();
        Secciones = GestorSecciones.ObtenerSecciones();
        ventanaMenuPrincipal.Navigate(typeof(MenuPrincipal));
    }

    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        base.OnNavigatingFrom(e);
        animation = ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("forwardAnimation", ventanaMenuPrincipal);
        animation.Configuration = new BasicConnectedAnimationConfiguration();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        animation = ConnectedAnimationService.GetForCurrentView().GetAnimation("forwardAnimation");
        if (animation != null)
        {
            animation.TryStart(ventanaMenuPrincipal);
        }
    }
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);
        ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("borderOut", ventanaMenuPrincipal);
    }
}

MenuPrincipal.xaml

<StackPanel x:Name="ventanaMenuPrincipal" VerticalAlignment="Center" HorizontalAlignment="Center">
    <Grid Width="220" Padding="0,10,0,0">
        <GridView ItemsSource="{x:Bind Secciones}"
                  IsItemClickEnabled="True"
                  ItemClick="MenuSecciones_Click"
                  ItemContainerStyle="{StaticResource CustomGridViewItem}"
                  SelectionMode="Single"
                  Padding="10,10,0,0" 
                  Width="200" 
                  Height="300" 
                  HorizontalAlignment="Center" 
                  VerticalAlignment="Center">
            <GridView.ItemTemplate>
                <DataTemplate x:DataType="data:Seccion">
                    <TextBlock Text="{x:Bind titulo}" 
                               HorizontalAlignment="Center" 
                               VerticalAlignment="Center"/>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>
    </Grid> <!-- Menú Secciones -->
</StackPanel>

MenuPrincipal.xaml.cs

public sealed partial class MenuPrincipal : Page
{
    Frame mainframe;
    private ConnectedAnimation animation;
    private List<Seccion> Secciones;
    public MenuPrincipal()
    {
        this.InitializeComponent();
        if (MenuPrincipalState.registrarQuetzalSeleccionado)
        {
            BotonUsuarioNuevo.IsEnabled = false;
        }
        Secciones = GestorSecciones.ObtenerSecciones();
        mainframe = Window.Current.Content as Frame;
    }

    #region Clicks

    private void MenuSecciones_Click(object sender, RoutedEventArgs e)
    {

        MenuPrincipalState.botonSeleccionado = sender as GridViewItem;
        if (MenuPrincipalState.inicio)
        {
            MenuPrincipalState.inicio = false;
            mainframe.Navigate(typeof(SeccionesPage), null, new SuppressNavigationTransitionInfo());
        }

    }
    #endregion Clicks

    #region Transiciones
    protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
        base.OnNavigatingFrom(e);
        animation = ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("forwardAnimation", ventanaMenuPrincipal);
        animation.Configuration = new BasicConnectedAnimationConfiguration();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        animation = ConnectedAnimationService.GetForCurrentView().GetAnimation("forwardAnimation");
        if (animation != null)
        {
            animation.TryStart(ventanaMenuPrincipal);
        }
    }
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);
        ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("borderOut", ventanaMenuPrincipal);
    }
    #endregion Transiciones
}

Seccion.cs

public class Seccion
{
    public string titulo { get; set; }
    public bool activo { get; set; }
    public bool seleccionado { get; set; }

}

public class GestorSecciones
{
    public static List<Seccion> ObtenerSecciones()
    {
        var secciones = new List<Seccion>
        {
            new Seccion {titulo = "PGE", activo = true, seleccionado = false },
            new Seccion {titulo = "PGS", activo = true, seleccionado = false },
            new Seccion {titulo = "DCS", activo = true, seleccionado = false },
            new Seccion {titulo = "SPC", activo = true, seleccionado = false },
            new Seccion {titulo = "DDL", activo = true, seleccionado = false },
            new Seccion {titulo = "PQD", activo = true, seleccionado = false }
        };

        return secciones;
    }
}

SeccionesPage.xaml

<Grid>
    <StackPanel x:Name="pantallaSecciones" Orientation="Horizontal">
        <Frame x:Name="ventanaMenuPrincipal"/>
        <Frame x:Name="info"/>
    </StackPanel>
</Grid>

Заранее спасибо. Ура!

PS Я уже пытался сохранить меню в одном кадре и просто загрузить другую информацию в другом кадре, не меняя страницы, но таким образом я не могу найти, как анимировать движение меню, потому что Ширина «информационного фрейма» является переменной в зависимости от выбора GridViewItem. Что бы я ни пытался, оно просто появляется на новом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...