Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义ScrollViewer样式会中断RichTextBox鼠标滚轮滚动_C#_Wpf_Xaml - Fatal编程技术网

C# 自定义ScrollViewer样式会中断RichTextBox鼠标滚轮滚动

C# 自定义ScrollViewer样式会中断RichTextBox鼠标滚轮滚动,c#,wpf,xaml,C#,Wpf,Xaml,要复制此样式,只需将此样式添加到任何具有RichTextBox的wpf项目: 一个完整的最小项目可以在这里找到: 这也是两种样式的示例: <!-- This style does NOT break RichTextBox Scrolling --> <Style TargetType="{x:Type ScrollViewer}"> <Style.Resources> <SolidColor

要复制此样式,只需将此样式添加到任何具有RichTextBox的wpf项目:

一个完整的最小项目可以在这里找到:

这也是两种样式的示例:

<!--

    This style does NOT break RichTextBox Scrolling

-->

<Style TargetType="{x:Type ScrollViewer}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    </Style.Resources>
</Style>


<!--

    The Style below breaks Rich Text Box

-->

<!--<Style TargetType="{x:Type ScrollViewer}">
    <Setter Property="CanContentScroll" Value="True"></Setter>
    <Setter Property="PanningMode" Value="Both"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <ScrollContentPresenter Grid.Column="0" />
                    <ScrollBar
                        x:Name="PART_VerticalScrollBar"
                        Grid.Row="0"
                        Grid.Column="1"
                        Maximum="{TemplateBinding ScrollableHeight}"
                        ViewportSize="{TemplateBinding ViewportHeight}"
                        Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                        Value="{TemplateBinding VerticalOffset}" />
                    <ScrollBar
                        x:Name="PART_HorizontalScrollBar"
                        Grid.Row="1"
                        Grid.Column="0"
                        Maximum="{TemplateBinding ScrollableWidth}"
                        Orientation="Horizontal"
                        ViewportSize="{TemplateBinding ViewportWidth}"
                        Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                        Value="{TemplateBinding HorizontalOffset}" />
                    --><!--<Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>--><!--
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>-->

然后在样式的底部,注释掉任一ScrollViewer样式,以便在它们之间交换。只需覆盖右下角的矩形颜色。另一个也执行相同的操作,但也定义了滚动条。定义滚动条的样式会打断垂直滚动

也可以使用Microsoft提供的官方样式进行复制,位于以下位置:

这里呢

更新:(上面的链接很快就会成为一个无效的例子,因为这个问题已经提交,显然将得到解决和修复)

有人知道为什么为ScrollViewer声明自定义样式会破坏文本框鼠标滚轮滚动吗


编辑:还应该注意,上面的示例不会妨碍或破坏任何其他控件(我已经注意到)的垂直鼠标滚轮滚动。RichTextBox似乎是一个边缘案例。

找到了解决方案,实际上很简单

您必须将
CanContentScroll=“True”
添加到
ScrollContentPresenter
控件模板中的
ScrollViewer
。以下是一个例子:

<Style TargetType="{x:Type ScrollViewer}">
        <Setter Property="CanContentScroll" Value="True"></Setter>
        <Setter Property="PanningMode" Value="Both"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <ScrollContentPresenter CanContentScroll="True" Grid.Column="0" />
                        <ScrollBar
                            x:Name="PART_VerticalScrollBar"
                            Grid.Row="0"
                            Grid.Column="1"
                            Maximum="{TemplateBinding ScrollableHeight}"
                            ViewportSize="{TemplateBinding ViewportHeight}"
                            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                            Value="{TemplateBinding VerticalOffset}" />
                        <ScrollBar
                            x:Name="PART_HorizontalScrollBar"
                            Grid.Row="1"
                            Grid.Column="0"
                            Maximum="{TemplateBinding ScrollableWidth}"
                            Orientation="Horizontal"
                            ViewportSize="{TemplateBinding ViewportWidth}"
                            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                            Value="{TemplateBinding HorizontalOffset}" />
                        <Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这在microsoft样式示例中的任何地方都没有提到,而且他们也从建议的样式模板中将其删除