2016-04-19 12 views
11

ho scorrere spettatore abilitato ad albero e casella di riepilogo e hanno addirittura personalizzato le barre di scorrimento ammissibili per prova this sito e ho acheived che cosa ho bisogno .La mia barra di scorrimento è ora alla ricerca come qui di seguitoscorrimento visualizzatore di ridimensionamento (in basso a destra) in WPF

enter image description here

ma ho bisogno del mio barra di scorrimento per essere simile a questa

enter image description here

ho bisogno che lo spazio in basso a destra per essere riempito con ho barra di scorrimento verticale o verticale. È possibile in wpf ??

Di seguito è lo stile personalizzato per la barra di scorrimento

<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> 

e qui c'è il codice TreeView

<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

Come di fornire il codice corrente? – Evk

risposta

4

Qui di seguito è un modo per farlo:

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> 

Converter:

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(); 
    } 
} 

USCITA:

Scroll

+0

Non funziona – Arshad

+0

@dahsra stai usando un altro stile per il tuo scrollviewer? Se sì, per favore dia il codice o muovi il grilletto nel mio stile in quello stile. –

+0

in realtà non sto utilizzando il visualizzatore di scroll separato. Sto usando solo la barra di scorrimento di default di treeview e per quella barra di scorrimento ho un altro stile definito – Arshad

Problemi correlati