C# 自定义ScrollViewer样式会中断RichTextBox鼠标滚轮滚动
要复制此样式,只需将此样式添加到任何具有RichTextBox的wpf项目: 一个完整的最小项目可以在这里找到: 这也是两种样式的示例: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
<!--
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样式示例中的任何地方都没有提到,而且他们也从建议的样式模板中将其删除