WPF ScrollViewer控件按钮可见性

时间:2015-04-16 21:36:26

标签: c# wpf xaml

我有一个ListBox,它隐藏了Horizo​​ntal ScrollBar。

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

如果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 个答案:

答案 0 :(得分:3)

实现目标的正确方法是重新设置ScrollBar ListBox的水平ScrollViwer。您必须为ControlTemplate定义自定义ScrollViewer,您只需将原始ScrollBar替换为ScrollBar的已编辑版本,并使用自定义ControlTemplate没有Track Thumb,但保留原始RepeatButton

您可以在ScrollViewer Styles and Templates页面中找到ControlTemplate的默认ScrollViewer,在ScrollBar Styles and Templates找到ControlTemplate的默认ScrollViewer MSDN上的页面。如果需要,您可以从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>