【问题标题】:Silverlight 4 - Mousewheel stops scrolling ScrollViewer when over contained RichTextBoxSilverlight 4 - 鼠标滚轮在包含 RichTextBox 时停止滚动 ScrollViewer
【发布时间】:2026-02-23 03:35:01
【问题描述】:

我有一个 Silverlight 4 浏览器外应用程序,其中有一个 ScrollViewer,里面有几个 RichTextBox。 RichTextBoxes 仅用于显示文本,从不编辑,从不滚动。

但是,当鼠标悬停在 RichTextBox 上时,鼠标滚轮事件似乎无法到达 ScrollViewer。有什么办法可以克服这个限制吗?

【问题讨论】:

    标签: silverlight silverlight-4.0 richtextbox


    【解决方案1】:

    只读 RichTextBox 不滚动的原因是 RichTextBox 的默认模板使用 ScrollViewer 而不是 ContentControl。所以要解决这个问题,你需要为 RichTextBox 创建自己的模板。

    我所做的是在 Blend 中创建 RichTextBox 模板的副本,并将其剥离为只读情况。这将删除大约 90% 的模板。保留以下样式/模板:

    <Style TargetType="c:RichTextBlock">
        <Setter Property="IsReadOnly" Value="True" />
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Grid x:Name="RootElement">
                        <Border x:Name="Border" CornerRadius="0"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Background="{TemplateBinding Background}"
                                Padding="{TemplateBinding Padding}"
                            >
                            <ContentControl x:Name="ContentElement" IsTabStop="False" />
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    为你的只读 RichTextBox 使用这个样式/模板,你应该很高兴。

    祝你好运,
    吉姆·麦柯迪
    面对面软件和YinYangMoney

    【讨论】: