2015-04-16 91 views
0

我有一个ListBox,它有隐藏的Horizo​​ntal ScrollBar。WPF ScrollViewer控件按钮的可见性

我已添加自定义按钮来控制此滚动(向左/向右移动)。

我想隐藏(设置能见度倒塌)或东西,如果ScrollViewer中没有包含足够的项目工作(当所有子项适合屏幕)

是否有可能在WPF?

编辑:

基本上我的观点是一种复杂的,但我有这样的事情:

<ListBox x:Name="ListBox" Margin="0,0,10,0" Grid.Column="0" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Background="Transparent" ItemsSource="{Binding OpenedPatients}" 
       SelectedItem="{Binding SelectedPatient}"> 
... 
... 
</ListBox> 

而且我有控制与代码隐藏:

private void ButtonBase1_OnClick(object sender, RoutedEventArgs e) 
{ 
    _scrollViewer = FindVisualChild<ScrollViewer>(ListBox); 
    _scrollViewer.LineLeft(); 
    _scrollViewer.LineLeft(); 
    _scrollViewer.LineLeft(); 
    _scrollViewer.LineLeft(); 
    _scrollViewer.LineLeft(); 
} 

private void ButtonBase2_OnClick(object sender, RoutedEventArgs e) 
{ 
    _scrollViewer = FindVisualChild<ScrollViewer>(ListBox); 
    _scrollViewer.LineRight(); 
    _scrollViewer.LineRight(); 
    _scrollViewer.LineRight(); 
    _scrollViewer.LineRight(); 
    _scrollViewer.LineRight(); 

} 
+1

请张贴您的XAML。 – sthotakura

回答

2

的正确方法实现你想要的是重新设置ListBoxScrollViwer的水平ScrollBar。您必须为ScrollViewer定义一个自定义ControlTemplate,其中您只需将原始ScrollBar替换为编辑版本的ScrollBar,而不使用Track Thumb即可自定义ControlTemplate,但保留原始RepeatButton

您可以找到ScrollViewer Styles and Templates页为ScrollViewer默认ControlTemplate并在ScrollBar Styles and Templates页面上MSDN为ScrollViewer默认ControlTemplate。如果需要,可以从MSDN上的ControlTemplate Class页面找到有关ControlTemplate的信息。

举个例子,改编自第一个链接页面,你需要创建一个自定义ControlTemplate的水平ScrollBar如上所述,并在自定义ControlTemplate应用它为ScrollViewer这样的:

<Style x:Key="LeftScrollViewer" 
     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}" 

        Template="{StaticResource YourCustomScrollBarTemplate}"/> 

     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style>