Silverlight 4 - колесико мыши перестает прокручивать ScrollViewer, если в нем содержится RichTextBox - PullRequest
1 голос
/ 12 февраля 2010

У меня есть приложение Silverlight 4 вне браузера с ScrollViewer, у которого есть несколько RichTextBoxes внутри. RichTextBoxes используются только для отображения текста, никогда не редактируются и никогда не прокручиваются.

Однако, когда мышь находится над RichTextBox, событие mousewheel, по-видимому, не достигает ScrollViewer. Есть ли способ преодолеть это ограничение?

1 Ответ

3 голосов
/ 08 апреля 2010

Причина, по которой RichTextBox только для чтения не прокручивается, заключается в том, что шаблон по умолчанию для RichTextBox использует ScrollViewer вместо ContentControl. Поэтому, чтобы решить проблему, вам нужно создать собственный шаблон для RichTextBox.

Я создал копию шаблона RichTextBox в Blend и удалил ее для случая только для чтения. Это удаляет около 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'ы, и вы должны быть в порядке.

Боже мой,
Джим МакКарди
Face to Face Software и YinYangMoney

...