2015-04-16 133 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>