触摸滚动文档查看器

发布于 2024-10-15 21:20:20 字数 5348 浏览 4 评论 0原文

我使用的是 .NET 3.5,所以我没有触摸屏的所有优点。我创建了自己的触摸屏 ScrollViewer,可以正常工作。我想将其合并到 DocumentViewer 模板中,但它不起作用。这是我的模板变体:

<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>

这不起作用,因为在查看器上移动手指的行为只会选择文本。该模板需要一个名为“PART_ContentHost”的 ScrollViewer (或其派生产品)。有没有办法锁定 ScrollViewer 以拉伸到其内容的范围。然后,我可以将自己的 TouchScrollViewer 包裹在整个 DocumentViewer 周围。或者有没有办法使文档查看器命中测试不可见(即IsHItTestVisible = false)。提前致谢。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文