10

WP7 に webscrollview がありますが、最初はフォーカスがありません (コンテンツは hittestVisible であるため、スクロールビューアーの hittestvisibility が削除されます)。コンテンツの可視性を false に設定すると、スクロールビューアをスクロールできますが、指を離してから元に戻す必要があります。私は本当にフォーカスをシフトしたいと思っています。この後、フォーカスを再適用して、スクロールビューがフォーカスを取得した後にスライドできるようにします。これが私のコードです:

<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 イベントです。これが機能しない理由と、それを修正する方法を知っている人はいますか? 前もって感謝します

4

1 に答える 1

1

明確にするために、ManipulationStarted(および Completed) を手動で起動することはできません。これは、EventArgs がパブリック コンストラクターなしで封印されているためです。

あなたが求めているのは、私が可能だと考えるものではありません。子アイテムは最初は相互作用をサポートしていないため、IsHitTestVisible別のイベントを実行する前に設定した後でも、イベントは子アイテムにバブルダウンされません。

ここでアーカイブしようとしているものを正確に見ることはできませんが、コントロールの機能が非常に限られているため、スクロールと WebBrowser をいじるのは 7.0/7.5 にはお勧めしません。

于 2012-06-16T12:39:25.757 に答える