2016-04-19 14 views
11

で私がツリービューとリストボックスで有効にビューアをスクロールしているとさえthisサイトを参照のうえ、スクロールバーをカスタマイズしていると私は.MYのスクロールバーが今スクロールビューアのサイズ変更(右下隅)WPF

以下のように見ている必要なものacheivedています

enter image description here

しかし、私は、私は、右下隅にあるスペースはHOで充填することを必要とするこの

enter image description here

のように見えるように私のスクロールバーを必要としますrizontalまたは垂直スクロールバー.WPFで可能ですか?

以下

は、スクロールバー

<local:ThicknessConverter x:Key="ThicknessConverter" /> 
    <Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}"> 
     <Setter Property="SnapsToDevicePixels" Value="True"/> 
     <Setter Property="OverridesDefaultStyle" Value="true"/> 
     <Style.Triggers> 
      <Trigger Property="Orientation" Value="Horizontal"> 
       <Setter Property="Width" Value="Auto"/> 
       <Setter Property="Height" Value="18" /> 
       <Setter Property="Template" 

        Value="{StaticResource HorizontalScrollBar}" /> 
      </Trigger> 
      <Trigger Property="Orientation" Value="Vertical"> 
       <Setter Property="Width" Value="18"/> 
       <Setter Property="Height" Value="Auto" /> 
       <Setter Property="Template" 

        Value="{StaticResource VerticalScrollBar}" /> 
      </Trigger> 
      <Trigger Property="Name" Value="PART_VerticalScrollBar"> 
       <Setter Property="Margin" Value="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer},Converter={StaticResource ThicknessConverter}}"> 
       </Setter> 
      </Trigger> 

     </Style.Triggers> 


    </Style> 

用にカスタマイズしたスタイルであり、ここでツリービューのコードの下に

<telerik:RadTreeView x:Name="radTreeView" Background="#4E4E4E" Margin="0,0,456,0" Grid.Row="2" 
       ItemsSource="{x:Static local:MainWindow.AnimalCategories}" ItemPrepared="treeView_ItemPrepared" 
          ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible" Grid.RowSpan="2" Grid.ColumnSpan="2"> 
      <telerik:RadTreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding Animals}"> 
        <TextBlock Text="{Binding Category}" /> 
        <HierarchicalDataTemplate.ItemTemplate> 
         <DataTemplate> 

          <TextBlock Text="{Binding Name}"/> 

         </DataTemplate> 
        </HierarchicalDataTemplate.ItemTemplate> 
       </HierarchicalDataTemplate> 
      </telerik:RadTreeView.ItemTemplate> 

     </telerik:RadTreeView> 
+0

どのようにあなたの現在のコードを提供するでしょうか? – Evk

答えて

4

があり、それを行う方法です:

XAML:

<ScrollViewer Height="400" Width="400" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" > 
    <ScrollViewer.Resources> 
     <local:ThicknessConverter x:Key="ThicknessConverter" /> 
     <Style TargetType="ScrollBar"> 
      <Style.Triggers> 
       <Trigger Property="Orientation" Value="Horizontal"> 
        <Setter Property="Margin" Value="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer},Converter={StaticResource ThicknessConverter}}"> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ScrollViewer.Resources> 
</ScrollViewer> 

コンバータ:

public class ThicknessConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var scrollBars = FindVisualChildren<ScrollBar>(value as DependencyObject); 
     foreach (var scrollBar in scrollBars) 
     { 
      if (scrollBar.Orientation == Orientation.Horizontal) 
      { 
       return new Thickness(0, 0, 0, 0 - scrollBar.ActualHeight); 
      } 
     } 
     return new Thickness(0, 0, 0, 0); 
    } 

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
    { 
     if (depObj != null) 
     { 
      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
      { 
       DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
       if (child != null && child is T) 
       { 
        yield return (T)child; 
       } 

       foreach (T childOfChild in FindVisualChildren<T>(child)) 
       { 
        yield return childOfChild; 
       } 
      } 
     } 
    }   

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

OUTPUT:

Scroll

+0

それが動作しない – Arshad

+0

@dahsraあなたのスクロールビューアには他のスタイルを使用していますか?はいの場合は、コードを入力するか、自分のスタイルのトリガーをそのスタイルに移動してください。 –

+0

実際には別のスクロールビューアを使用していません。私はtreeviewのデフォルトのスクロールバーを使用しています。スクロールバーには他のスタイルが定義されています – Arshad

関連する問題