Fire Manipulation在WP7中手动启动

时间:2012-05-09 09:28:53

标签: windows-phone-7

我在WP7中有一个webscrollview,它最初没有焦点(内容是hittestVisible,因此带走了scrollviewers hittestvisibility)。当我将其内容的可见性设置为false时,我可以滚动滚动查看器,但只有在抬起我的手指并将其再次放回之后。我真的希望焦点转移,然后重新应用焦点,以便我可以在scrollview获得焦点后滑动,而不是等待下一个manipStarted事件触发。 这是我的代码:

<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事件。 有没有人知道为什么这不起作用,以及如何解决它? 提前致谢

1 个答案:

答案 0 :(得分:1)

为了澄清一下,ManipulationStarted(和已完成)无法手动触发,因为它们的EventArgs在没有任何公共构造函数的情况下被密封。

你所要求的,不是我认为可能的。由于您的子项目最初不支持任何互动,因此即使您在执行其他事件之前设置IsHitTestVisible,事件也不会向下冒泡。

我无法看到你在这里想要存档的内容,但是我不推荐使用滚动和WebBrowser来推荐7.0 / 7.5,因为控件的功能非常有限。