2012-02-17 1 views
0

私はScrollViewer(name = "master")をStackPanelの中​​にいくつかの例題の罫線や矩形、さらにそれよりも多くのTextを持つTextBoxを持っているので、TextBoxはスクロール可能です。 TextBoxをスクロールして上部の下端に来たとき、TextBoxテンプレート(ScrollViewer x:Name = "PART_ContentHost")にあるScrollViewerは、メインのScrollViewer( "master")へのスクロールをルーティングしました。TextBlockのScrollViewerテンプレートがスクロールをルーティングしていますか?

この動作をエリートするためにTextBox Templateを編集することは可能ですか?

テンプレート内の別のScrollViewerとの組み合わせも問題ありませんが、これはうまく動作しますが、選択肢を見ることはできませんので、解決策はありません。

他にもアイデアはありますか?

<Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}"> 
     <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
         <ScrollViewer x:Name="PART_ContentHost" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 


<ScrollViewer Name="master" Height="71" Width="164" HorizontalAlignment="Right" Margin="0,0,38.666,28.833" VerticalAlignment="Bottom"> 
        <StackPanel Orientation="Vertical" Width="121"> 
         <Rectangle Fill="red" Height="45" Stroke="Black"/> 
         <Rectangle Fill="red" Height="45" Stroke="Black"/> 
         <Rectangle Fill="red" Height="45" Stroke="Black"/> 
         <Rectangle Fill="red" Height="45" Stroke="Black"/> 
         <TextBox Text="TextBox sydxr gs dgh drz h we rths dretghe dtrzuj hwesrtgh 
    bdnftzh srdztj ser tghbed5rsetzhnrd hserdfgcjmnjs egrfhfn dshgrdxthgj" TextWrapping="Wrap" Height="67" Style="{StaticResource detail_text}" /> 
         <Rectangle Fill="red" Height="45" Stroke="Black"/> 
         <Rectangle Fill="red" Height="45" Stroke="Black"/> 
        </StackPanel> 
      </ScrollViewer> 

ありがとうございます。私もScrollViewer.VerticalScrollBarVisibility="Auto"を含ま

<TextBox Text="TextBox sydxr gs dgh drz h we rths dretghe dtrzuj hwesrtgh 
bdnftzh srdztj ser tghbed5rsetzhnrd hserdfgcjmnjs egrfhfn dshgrdxthgj" TextWrapping="Wrap" Height="67" ScrollViewer.VerticalScrollBarVisibility="Auto" PreviewMouseWheel="TextBox_PreviewMouseWheel" /> 

注:

答えて

0

私の提案は、テキストボックス自体にPreviewMouseWheelEventをキャプチャすることです。スクロール時にいずれかの上部または下部とマークイベントで行われている場合かのように扱わとして

は、その後の評価:

private void TextBox_PreviewMouseWheel(object sender, MouseWheelEventArgs e) 
{ 
    var textbox = sender as TextBox; 
    var decorator = VisualTreeHelper.GetChild(textbox, 0) as Decorator; 
    var scrollViewer = decorator.Child as ScrollViewer; 

    if ((scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight && e.Delta < 0) || 
     (scrollViewer.VerticalOffset == 0 && e.Delta > 0)) 
    { 
     e.Handled = true; 
    } 
} 

、このよう歓声を新しいテンプレートを適用する必要はありませんが!

関連する問題