2010-02-12 35 views
1

我有一个Silverlight 4浏览器外的应用程序与ScrollViewer里面有几个RichTextBoxes。 RichTextBoxes仅用于显示文本,并且从不编辑和永不滚动。Silverlight 4 - Mousewheel停止滚动ScrollViewer当包含RichTextBox

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

回答

3

只读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'es,你应该是好去。

Goood运气,
吉姆·麦柯迪
面对面软件和YinYangMoney