with developing bootstrap apps app c# xaml windows-runtime windows-store-apps

c# - developing - windows universal app javascript



¿Cómo permitir manipulaciones dentro de los controles de elementos ListView/GridView mientras se permiten manipulaciones de desplazamiento y deslizamiento cruzado en ListView/GridView? (2)

Específicamente, tengo un control de usuario personalizado que recibe eventos de manipulación para desplazar un control personalizado de DirectX. Este control, y otros similares, son elementos en un GridView. Quiero que GridView pueda desplazarse horizontalmente a través de la manipulación predeterminada de TranslateRailsX, mientras que los controles deberían poder recibir eventos de manipulación de TranslateRailsY.

En mis experimentos hasta el momento, al establecer el modo de manipulación de los controles en el sistema, puedo hacer que funcione el desplazamiento GridView, pero los controles no recibirán ningún evento de manipulación. Al establecer el modo de manipulación de controles en Todos, o en TranslateY, o en TranslateRailsY, puedo obtener mi control personalizado para recibir los eventos de manipulación, pero el desplazamiento táctil de GridView no funcionará.

¿Cómo puedo permitir AMBAS de estas manipulaciones?


Puede establecer dos valores para ManipulationMode en xaml. Esperemos que lo maneje.

ManipulationMode="TranslateX,System"


No se puede hacer con 8.0 (para 8.1 desplazarse a EDITAR). Debería implementar su propio ScrollViewer para usar en la plantilla GridView o colocar una capa encima de GridView y retransmitir todas las llamadas de entrada como sugerí antes . De hecho, quizás la implementación de su propia versión de ScrollViewer no sería tan difícil (un control Canvas con un elemento secundario que llama a Canvas.SetLeft en su elemento secundario en los eventos de manipulación).

Una nueva idea que tengo que podría funcionar para usted es poner otro ScrollViewer frente a su control DirectX y usar sus eventos ViewChanged como lo haría con los eventos de manipulación. Verifique esto:

XAML

<Page x:Class="App84.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App84" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <GridView> <Grid Width="300" Height="300"> <Rectangle x:Name="DirectXControlPlaceholder" Width="300" Height="300" Fill="Yellow" /> <ScrollViewer x:Name="ManipulationCaptureScrollViewer" Style="{StaticResource VerticalScrollViewerStyle}" VerticalScrollBarVisibility="Hidden" ViewChanged="ScrollViewer_OnViewChanged"> <Rectangle Width="200" Height="10000" Fill="Transparent"/> </ScrollViewer> <TextBlock x:Name="OffsetTextBlock" Foreground="Black" FontSize="24" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Grid> <Rectangle Width="300" Height="300" Fill="GreenYellow" /> <Rectangle Width="300" Height="300" Fill="LimeGreen" /> <Rectangle Width="300" Height="300" Fill="Red" /> <Rectangle Width="300" Height="300" Fill="OrangeRed" /> <Rectangle Width="300" Height="300" Fill="DarkOrange" /> <Rectangle Width="300" Height="300" Fill="Orange" /> </GridView> </Grid> </Page>

Código detrás

using Windows.UI.Xaml.Controls; namespace App84 { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private void ScrollViewer_OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e) { OffsetTextBlock.Text = ManipulationCaptureScrollViewer.VerticalOffset.ToString(); } } }

EDITAR*

También con Windows 8.1 obtienes ManipulationModes.System que combinado con otros modos (sin embargo, escala y rotación no son compatibles) debería permitir manejar manipulaciones dentro de un ScrollViewer . A continuación, puede llamar a CancelDirectManipulations() en el elemento manipulado una vez que desee que sus ScrollViewers principales dejen de procesar manipulaciones para pan y zoom.