WPF ScrollViewer 控件按钮可见性

Tom*_*asz 0 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>
Run Code Online (Sandbox Code Playgroud)

我有代码隐藏控件:

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

}
Run Code Online (Sandbox Code Playgroud)

She*_*dan 5

达到你想要什么正确的方法是再整水平ScrollBar的的ListBoxScrollViwer。您必须为 定义一个自定义ControlTemplateScrollViewer在其中您只需使用没有 的自定义替换原始ScrollBar的编辑版本,但保留原始s。ScrollBarControlTemplateTrack ThumbRepeatButton

您可以在默认ControlTemplateScrollViewerScrollViewer中样式和模板页面,默认ControlTemplateScrollViewer滚动条样式和模板上的MSDN页面。如果需要,可以ControlTemplate从MSDN 上的ControlTemplateClass页面找到有关s 的信息。

例如,改编自第一个链接页面,您需要如上所述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>
Run Code Online (Sandbox Code Playgroud)