2011-02-08 29 views
0

私のScrollViewerが機能しません。私はUserControlを作成して、スクロールビューアーをスクロールできることをユーザーに伝える矢印インジケーターを表示しました。だから、内容はちょうどScrollViewerをオーバーフローします。コントロールがスクロールバーを示すか、マウスホイールのスクロールや、何もできない内部私のScrollViewerがスクロールしないのはなぜですか?

<UserControl x:Class="QCK.Common.ResourceLibrary.CustomControls.ArrowScrollViewer" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      Name="UserControl"> 
    <UserControl.Resources> 

     <Style x:Key="ScrollDownArror" TargetType="{x:Type Border}"> 
      <Setter Property="Margin" Value="2,0,18,0"/> 
      <Setter Property="Visibility" Value="Visible"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=CanScrollDown}" Value="True"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 

     <Style x:Key="ScrollUpArror" TargetType="{x:Type Border}"> 
      <Setter Property="Margin" Value="2,0,18,0"/> 
      <Setter Property="Visibility" Value="Visible"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=CanScrollUp}" Value="True"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 

    </UserControl.Resources> 
    <Grid> 
     <ScrollViewer Name="scrollViewer" VerticalScrollBarVisibility="Visible"> 
      <ContentPresenter VerticalAlignment="Top"/> 
     </ScrollViewer> 

     <Border Style="{StaticResource ScrollUpArror}" DataContext="{Binding ElementName=c_list}" 
           IsHitTestVisible="false" 
           VerticalAlignment="Top"> 
      <Image Margin="15" Height="20"> 
       <Image.Source> 
        <DrawingImage> 
         <DrawingImage.Drawing> 
          <GeometryDrawing Brush="DarkGray" Geometry="M 0, 10 L 50, 30 L 100, 10 Z"> 
           <GeometryDrawing.Pen> 
            <Pen Brush="DimGray" /> 
           </GeometryDrawing.Pen> 
          </GeometryDrawing> 
         </DrawingImage.Drawing> 
        </DrawingImage> 
       </Image.Source> 
      </Image> 
     </Border> 

     <Border Style="{StaticResource ScrollDownArror}" DataContext="{Binding ElementName=c_list}" 
           IsHitTestVisible="false" 
           VerticalAlignment="Bottom"> 
      <Image Margin="15" Height="20"> 
       <Image.Source> 
        <DrawingImage> 
         <DrawingImage.Drawing> 
          <GeometryDrawing Brush="DarkGray" Geometry="M 0, 30 L 50, 10 L 100, 30 Z"> 
           <GeometryDrawing.Pen> 
            <Pen Brush="DimGray" /> 
           </GeometryDrawing.Pen> 
          </GeometryDrawing> 
         </DrawingImage.Drawing> 
        </DrawingImage> 
       </Image.Source> 
      </Image> 
     </Border> 
    </Grid> 
</UserControl> 

内容だけオーバーフロー:ここに私のXAMLです。

答えて

1

私は100%あなたがこれをしたいと思っているわけではありませんので、UserControlがここで目標になるかもしれません。私はそれを理解するように、あなたはこの

<local:ArrowScrollViewer x:Name="userControl11"> 
    <TextBox Text="Test" AcceptsReturn="True"/> 
</local:ArrowScrollViewer> 

ような何かをできるようにしたいとTextBoxは矢印インジケータの間で終わるだろう。その場合は、代わりにUserControlのテンプレートを編集する必要があると思います。あなたが背後にあるコードからテンプレートにScrollViewerにアクセスすることができますいくつかの方法があり

この

<UserControl.Resources> 
    <Style x:Key="ScrollDownArror" TargetType="{x:Type Border}"> 
     <Setter Property="Margin" Value="2,0,18,0"/> 
     <Setter Property="Visibility" Value="Visible"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=CanScrollDown}" Value="True"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

    <Style x:Key="ScrollUpArror" TargetType="{x:Type Border}"> 
     <Setter Property="Margin" Value="2,0,18,0"/> 
     <Setter Property="Visibility" Value="Visible"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=CanScrollUp}" Value="True"> 
       <Setter Property="Visibility" Value="Visible"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 
<UserControl.Template> 
    <ControlTemplate TargetType="{x:Type UserControl}"> 
     <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="Auto"/> 
       </Grid.RowDefinitions> 
       <Border Grid.Row="0" Style="{StaticResource ScrollUpArror}" DataContext="{Binding ElementName=c_list}" 
            IsHitTestVisible="false" 
            VerticalAlignment="Top"> 
        <Image Margin="15" Height="20"> 
         <Image.Source> 
          <DrawingImage> 
           <DrawingImage.Drawing> 
            <GeometryDrawing Brush="DarkGray" Geometry="M 0, 10 L 50, 30 L 100, 10 Z"> 
             <GeometryDrawing.Pen> 
              <Pen Brush="DimGray" /> 
             </GeometryDrawing.Pen> 
            </GeometryDrawing> 
           </DrawingImage.Drawing> 
          </DrawingImage> 
         </Image.Source> 
        </Image> 
       </Border> 
       <ScrollViewer Grid.Row="1" Name="scrollViewer" VerticalScrollBarVisibility="Visible"> 
        <ContentPresenter Grid.Row="1" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </ScrollViewer> 
       <Border Grid.Row="2" Style="{StaticResource ScrollDownArror}" DataContext="{Binding ElementName=c_list}" 
            IsHitTestVisible="false" 
            VerticalAlignment="Bottom"> 
        <Image Margin="15" Height="20"> 
         <Image.Source> 
          <DrawingImage> 
           <DrawingImage.Drawing> 
            <GeometryDrawing Brush="DarkGray" Geometry="M 0, 30 L 50, 10 L 100, 30 Z"> 
             <GeometryDrawing.Pen> 
              <Pen Brush="DimGray" /> 
             </GeometryDrawing.Pen> 
            </GeometryDrawing> 
           </DrawingImage.Drawing> 
          </DrawingImage> 
         </Image.Source> 
        </Image> 
       </Border> 
      </Grid>     
     </Border> 
    </ControlTemplate> 
</UserControl.Template> 

アップデートのようにそれを試してみてください。ここで

  • がビジュアルツリートラバース

の背後にあるコードでScrollViewer

  • 利用Template.FindNameのLoadedイベントのイベントハンドラを追加します頭に浮かぶ3つの方法がここでは一例ですですLoadedイベントを使用します。

    <ScrollViewer Loaded="scrollViewer_Loaded" 
           Grid.Row="1" 
           ...> 
    

    private ScrollViewer m_scrollViewer; 
    private void scrollViewer_Loaded(object sender, RoutedEventArgs e) 
    { 
        m_scrollViewer = sender as ScrollViewer; 
    } 
    

    そして、あなたはFindName指定

    private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
        m_scrollViewer = this.Template.FindName("scrollViewer", this) as ScrollViewer; 
    } 
    
  • +0

    を使用したいしかし、私は、私は背後にあるコードでスクロールビューアにアクセスできないことを行う場合であれば背後コード?私はできますか? – Jordan

    +0

    @Jordan:コードビハインドの 'ScrollViewer'へのアクセス方法に関する私の答えを更新しました –

    関連する問題