2012-11-30 32 views
2

我複製了MSDN中的ScrollViewer模板(link),它破壞了文本框的行爲。當我使用鼠標選擇文本時,現在滾動不會選擇。爲什麼?如何解決它?ScrollViewer控件模板中斷文本框

這裏是我的代碼

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Height="350" 
     Width="525"> 
    <Window.Resources> 
    <Style TargetType="{x:Type ScrollViewer}"> 
     <Setter Property="OverridesDefaultStyle" 
       Value="True" /> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
       <RowDefinition /> 
       <RowDefinition Height="Auto" /> 
       </Grid.RowDefinitions> 
       <Border Grid.Column="1" 
         BorderThickness="0,1,1,1"> 
       <Border.BorderBrush> 
        <SolidColorBrush Color="{DynamicResource BorderMediumColor}" /> 
       </Border.BorderBrush> 
       <ScrollContentPresenter /> 
       </Border> 
       <ScrollBar x:Name="PART_VerticalScrollBar" 
         Value="{TemplateBinding VerticalOffset}" 
         Maximum="{TemplateBinding ScrollableHeight}" 
         ViewportSize="{TemplateBinding ViewportHeight}" 
         Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /> 
       <ScrollBar x:Name="PART_HorizontalScrollBar" 
         Orientation="Horizontal" 
         Grid.Row="1" 
         Grid.Column="1" 
         Value="{TemplateBinding HorizontalOffset}" 
         Maximum="{TemplateBinding ScrollableWidth}" 
         ViewportSize="{TemplateBinding ViewportWidth}" 
         Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /> 
      </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </Window.Resources> 
    <StackPanel> 
    <TextBox Margin="20" 
      Width="100" 
      Text="sdjkfhsdjkfhjkdshxcmvnm,xcnv,mxcnv, mxcnv,mxcngjklsdjkfh jkdfghjkfhgjkdfhgkjdfghkjdfhgbkjcvhbkcvjbh" /> 
    </StackPanel> 
</Window> 

我使用.NET 4

回答

0

是的,我得到了相同的行爲。恐怕我無法弄清楚它爲什麼會發生,這可能是WPF中的一個錯誤,也可能是他們定義控件模板的方式。

TextBox的控件模板有一個滾動查看器作爲其佈局的一部分,顯然模板以某種方式干擾。

我唯一可以提出的建議是,您將自己的樣式設置爲x:Key值,並且只在需要它的特定情況下在ScrollViewer元素上引用該樣式,而不是將其應用於所有ScrollViewer。然後,包含在TextBox元素樹中的ScrollViewer將不會拾取它。有點痛苦,你失去了WPF模板的動態性,但它應該工作。

0

我遇到了同樣的問題,我終於通過向ScrollContentPresenter添加CanContenScroll =「True」來解決問題。

<ScrollContentPresenter Grid.Column="0" CanContentScroll="True"/> 

,如果你想讓它更靈活的只是將其綁定到祖先值:

<ScrollContentPresenter Grid.Column="0" 
         CanContentScroll="{TemplateBinding CanContentScroll}" /> 

希望它有助於