У меня есть меню по центру экрана, меню содержит 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. Что бы я ни пытался, оно просто появляется на новом месте.