studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones windows-phone-7 windows-phone-8 scroll windows-phone scrollviewer

windows-phone-7 - reales - libro de android studio en español pdf



cuando se muestra el teclado, el desplazamiento es limitado (2)

Este es un problema conocido y es causado por el SIP que cambia el área visible de la pantalla. El enlace que David Gorden mencionó ayuda, pero en realidad necesitas cambiar la altura del scrollviewer para lograr resultados perfectos. ¡Para hacer que las cosas sean un poco más complejas, WP no activa un evento cuando el SIP está visible! Por lo tanto, debe conectar los eventos GotFocus / LostFocus.

Edite su scrollviewer para que se vea así:

<ScrollViewer x:Name="_scrollViewer" VerticalAlignment="Top" GotFocus="UIElement_OnGotFocus" LostFocus="UIElement_OnLostFocus" ... bla bla

Ahora agregue lo siguiente en el código subyacente:

private bool _isHdDevice; private int _sipHeight; private double _origHeight; // Constructor public MainPage() { InitializeComponent(); // todo - cater for landscape mode or sip scopenames that require extra space (predictive text and cut&paste icon) var deviceWidth = this.ActualWidth; _isHdDevice = (deviceWidth > 500); _sipHeight = _isHdDevice ? 540 : 375; _origHeight = _scrollViewer.Height; } private void UIElement_OnGotFocus(object sender, RoutedEventArgs e) { double height = this.ActualHeight - _sipHeight - TitlePanel.ActualHeight; _scrollViewer.Height = height; // the following lines are crucial otherwise a black band could appear above the SIP App.Current.RootVisual.RenderTransform = new CompositeTransform(); this.UpdateLayout(); } private void UIElement_OnLostFocus(object sender, RoutedEventArgs e) { _scrollViewer.Height = _origHeight; }

Esto básicamente cambia el tamaño del área de desplazamiento cuando el sorbo (teclado) está a la vista. Necesitará agregar más código para atender cosas como la rotación de pantalla, el nombre de ámbito asociado al cuadro de texto y el icono de cortar y pegar si está a la vista. Pero esto te pondrá en marcha y hará lo difícil.

Marque la respuesta si ayudó a solucionar el problema.

Tengo un problema al desplazarme por el teléfono de Windows. Tengo muchos elementos en la página, así que para agregar la capacidad de desplazamiento, pongo esto en ScrollViewer. Hovewer, cuando aparece en un bloque de texto y se muestra el teclado, el desplazamiento funciona pero corta la parte superior e inferior de la página para que el usuario no pueda alcanzarla. ¿Has tenido un problema similar con tus aplicaciones y sabes cómo solucionarlo?

Estaré realmente agradecido por cualquier ayuda

Enlace a la imagen cuando pongo una captura de pantalla con mi problema

La imagen contiene cuatro capturas de pantalla:

1) La parte superior de la página

2) La parte inferior de la página

3) Foco en el primer cuadro de texto

4) El área en la página que se puede alcanzar cuando el foco está configurado en el primer cuadro de texto

La última imagen presente es are que se puede rached cuando el foco se establece en el primer cuadro de texto. Como puede ver, no puedo acceder a los cuadros de texto debajo del Campo 7 cuando se muestra el teclado.

Lo que necesito es la capacidad de desplazarse y alcanzar todos los elementos cuando se muestra el teclado.

¿Sabes cómo resolver mi problema?

Es mi código xaml:

<phone:PhoneApplicationPage x:Class="PhoneApp6.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <ScrollViewer Grid.Row="1" Height="600" Margin="12 0"> <StackPanel> <StackPanel> <TextBlock Text="Name 1" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 2" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 3" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 4" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 5" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 6" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 7" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 8" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 9" /> <TextBox /> </StackPanel> <StackPanel> <TextBlock Text="Name 10" /> <TextBox /> </StackPanel> <Button>Submit</Button> </StackPanel> </ScrollViewer> </Grid> </phone:PhoneApplicationPage>


Si entiendo esto correctamente, estaba teniendo un problema similar en mi propia aplicación con la imposibilidad de desplazarme hacia abajo a las texboxes más bajas mientras el teclado está visible. Como no soy tan listo, lo resolví de la siguiente manera: un espaciador que aparece cuando el teclado está levantado y desaparece cuando no está.

Los elementos de la caja de texto para la entrada en mi scrollviewer están en wrappanels, para mantener las cosas ordenadas. Debajo del último panel de ajuste, agregué otro panel de envoltura vacío, llamado "spacer" con una altura de 120. Está establecido en visibility.collapsed de forma predeterminada.

Como parte del manejador de eventos de getfocus para cada una de las cajas de texto en el panel de ajuste, configuré el espaciador como visible. Eso permite desplazarse hasta el último wrappanel / cuadros de texto en mi visor de desplazamiento mientras el teclado está activo.

Como parte de mi controlador de eventos de pérdida de foco para cada uno de los cuadros de texto, la visibilidad del espaciador vuelve a estar "contraída". De esa manera, cuando no hay teclado arriba, el scrollviewer no tiene un espacio grande, funky y vacío en la parte inferior.

Esto puede no ser tan elegante, pero es fácil y funciona bastante bien para mí. Todavía no he encontrado ningún problema, aunque eso no significa que no haya algo que me haya perdido.