我在WP7中有一个webscrollview,它最初没有焦点(内容是hittestVisible,因此取消了scrollviewers的hittestvisibility).当我将内容的可见性设置为false时,我可以滚动滚动浏览器,但是仅在解除手指之后再次将其重新放回.我真的很喜欢重点转移,之后重新应用焦点,以便我可以在滚动视图获得焦点后滑动,不要等待下一个操作开始事件触发.
这是我的代码:
原文链接:/windows/363882.html这是我的代码:
<UserControl x:Class="WTFApp.Resources.ViewControllers.DetailedItemContentControl" 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" xmlns:local="clr-namespace:EiBaseApi.Animation;assembly=EiBaseApi" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480" shell:SystemTray.IsVisible="True" > <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="10"/> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.Resources> <Storyboard x:Name="MediatedListBoxContentAnimator"> <DoubleAnimation x:Name="MediatedAnimation" Storyboard.TargetName="WebScrollViewMediator" Storyboard.TargetProperty="ScrollableWidthMultiplier" > </DoubleAnimation> </Storyboard> </Grid.Resources> <ScrollViewer x:Name="Scroller" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" ManipulationMode="Control" Grid.Row="1" Grid.RowSpan="2" > <StackPanel Name="WebScrollView" Orientation="Horizontal"> <UserControl Name="LeftContentControl" MinWidth="480" /> <UserControl Name="MiddleContentControl" MinWidth="480" /> <UserControl Name="RightContentControl" MinWidth="480" /> </StackPanel> </ScrollViewer> <local:ScrollableItemAnimationMediator x:Name="WebScrollViewMediator" ScrollViewer="{Binding ElementName=Scroller}"/> </Grid>
在C#中:
protected override void TouchFrameDelta( object sender,TouchFrameEventArgs e ) { if ( UserManipulating == ManipulationState.ManipulationStopped ) { UserManipulating = ManipulationState.ManipulationStarted; ManipulationStartingPoint = e.GetPrimaryTouchPoint( null ).Position; } //if we are already manipulating the scrollviewer,we do nothing if ( UserManipulating != ManipulationState.ManipulationStarted ) { return; } TouchPoint touchPoint = e.GetPrimaryTouchPoint( null ); float differenceStart = ( float )( touchPoint.Position.X - ManipulationStartingPoint.X ); if ( Math.Abs( differenceStart ) >= 25 ) { if ( BrowserListIsHitTestVisible ) { BrowserListIsHitTestVisible = false; MiddleContentControl.Focus( ); MiddleContentControl.UpdateLayout( ); return; } float differenceDelta = ( float ) ( touchPoint.Position.X - ManipulationDeltaPoint.X ); if ( touchPoint.Action == TouchAction.Up ) { UserManipulating = ManipulationState.ManipilatingScrollViewCompleted; OnManipulationCompleted( differenceDelta ); } } ManipulationDeltaPoint = touchPoint.Position; }
TouchFrameDelta是Touch.FrameReported事件.
有没有人有一个想法为什么这不工作,如何解决?
提前致谢