【问题标题】:WPF ScrollViewer control buttons visibilityWPF ScrollViewer 控制按钮的可见性
【发布时间】:2015-04-17 05:57:57
【问题描述】:

我有一个 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();

}

【问题讨论】:

  • 请发布您的 XAML。

标签: c# wpf xaml


【解决方案1】:

实现您想要的正确方法是重新设置ListBoxScrollViwer 的水平ScrollBar 的样式。您必须为ScrollViewer 定义一个自定义ControlTemplate,在其中您只需将原始ScrollBar 替换为ScrollBar 的编辑版本,使用自定义ControlTemplate 没有Track Thumb,但保留原创RepeatButtons.

您可以在 MSDN 上的 ScrollViewer Styles and Templates 页面中找到 ScrollViewer 的默认 ControlTemplateScrollViewer 的默认 ControlTemplate。如果需要,可以从 MSDN 上的ControlTemplate Class 页面了解ControlTemplates。

例如,改编自第一个链接页面,您需要为水平 ScrollBar 创建自定义 ControlTemplate,如上所述,并将其应用于自定义 ControlTemplateScrollViewer 像这样:

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

【讨论】:

  • 谢谢谢谢,非常感谢,你在可见性方面为我节省了很多时间。 :D
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 2012-07-17
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2012-06-12
  • 2011-12-15
  • 2014-11-06
相关资源
最近更新 更多