2010-05-19 25 views
1

我想製作一個TextBox模板,我需要在模板中包含一個ScrollViewer - 基本上我想添加一些需要滾動的內容(如行號)正常的文字。 對TextBox的默認模板是這樣的:Silverlight - 在TextBox模板中使用ScrollViewer

      <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="1" Opacity="1"> 
          <Grid> 
           <Border x:Name="ReadOnlyVisualElement" Background="#5EC9C9C9" Opacity="0"/> 
           <Border x:Name="MouseOverBorder" BorderBrush="Transparent" BorderThickness="1"> 
            <ScrollViewer x:Name="ContentElement" BorderThickness="0" IsTabStop="False" Padding="{TemplateBinding Padding}"/> 
           </Border> 
          </Grid> 
         </Border> 

如果我從ScrollViewer中改變的ContentElement邊境,例如,文本框可以正常工作 - 我只是失去滾動能力。 現在,如果我用ScrollViewer包裝ContentElement,它將不再顯示插入符號和選擇內容 - 如果鍵入,它仍會更新。

      <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="1" Opacity="1"> 
          <Grid> 
           <Border x:Name="ReadOnlyVisualElement" Background="#5EC9C9C9" Opacity="0"/> 
           <Border x:Name="MouseOverBorder" BorderBrush="Transparent" BorderThickness="1"> 
            <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" > 
             <Border x:Name="ContentElement" BorderThickness="0" Padding="{TemplateBinding Padding}" /> 
            </ScrollViewer> 
           </Border> 
          </Grid> 
         </Border> 

任何想法爲什麼發生這種情況,我該如何解決它?

回答

0

只是在黑暗中拍攝,因爲我沒有驗證...但控件可能正在尋找名爲ContentElement的ScrollViewer類型的TemplatePart。

+0

我檢查了反射器,從我可以告訴它儘量使用ContentElement作爲ScrollViewer,但這應該只會影響滾動。如果ContentElement不是ScrollViewer,TextBox將按預期工作(插入和選擇) - 根據文檔,它可以是任何FrameworkElement。如果ContentElement包裝在ScrollViewer中,會出現問題,但我無法弄清楚原因。 – vladhorby 2010-05-21 22:16:16