Touch scrolling DocumentViewer

1.5k views Asked by At

I'm using .NET 3.5, so I don't have all of the nice touch screen goodness. I created my own touch screen ScrollViewer that works alright. I'm wanting to incorporate that into the DocumentViewer template, but its not working. Here is my variation of the template:

<Style TargetType="{x:Type DocumentViewer}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DocumentViewer}">
                <Border BorderThickness="{TemplateBinding BorderThickness}" 
                        BorderBrush="{TemplateBinding BorderBrush}"
                        Focusable="False">
                    <Grid KeyboardNavigation.TabNavigation="Local">
                        <Grid.Background>
                            <SolidColorBrush Color="{DynamicResource ControlLightColor}" />
                        </Grid.Background>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <ToolBar ToolBarTray.IsLocked="True"
                                 KeyboardNavigation.TabNavigation="Continue"
                                 Visibility="Collapsed">
                            <Button Command="ApplicationCommands.Print"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    Content="Print" />
                            <Button Command="ApplicationCommands.Copy"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    Content="Copy" />
                            <Separator />
                            <Button Command="NavigationCommands.IncreaseZoom"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    Content="Zoom In" />
                            <Button Command="NavigationCommands.DecreaseZoom"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    Content="Zoom Out" />
                            <Separator />
                            <Button Command="NavigationCommands.Zoom"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    CommandParameter="100.0"
                                    Content="Actual Size" />
                            <Button Command="DocumentViewer.FitToWidthCommand"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    Content="Fit to Width" />
                            <Button Command="DocumentViewer.FitToMaxPagesAcrossCommand"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    CommandParameter="1"
                                    Content="Whole Page" />
                            <Button Command="DocumentViewer.FitToMaxPagesAcrossCommand"
                                    CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                                    CommandParameter="2"
                                    Content="Two Pages" />
                        </ToolBar>

                        <custom:TouchScrollViewer x:Name="PART_ContentHost"
                                      Grid.Row="1">
                            <ScrollViewer.Background>
                                <LinearGradientBrush EndPoint="0.5,1"
                                                     StartPoint="0.5,0">
                                    <GradientStop Color="{DynamicResource ControlLightColor}"
                                                  Offset="0" />
                                    <GradientStop Color="{DynamicResource ControlMediumColor}"
                                                  Offset="1" />
                                </LinearGradientBrush>
                            </ScrollViewer.Background>
                        </custom:TouchScrollViewer>

                        <ContentControl Grid.Row="2" x:Name="PART_FindToolBarHost" Visibility="Collapsed"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

This doesn't work, because the act of moving your finger over the viewer just selects text. The template is requires a ScrollViewer (or derivative thereof) with the name "PART_ContentHost". Is there a way to lock a ScrollViewer to stretch to the extent of its contents. I could then wrap my own TouchScrollViewer around the entire DocumentViewer. Or is there a way to make the document viewer hit-test invisible (i.e IsHItTestVisible = false). Thanks in advance.

0

There are 0 answers