Wpf 独立隐藏滚动条按钮

Wpf 独立隐藏滚动条按钮,wpf,xaml,scrollbar,Wpf,Xaml,Scrollbar,我已经为scrollbar(水平)创建了一个自定义模板,它现在只包含两个没有scrollbar的滚动按钮,这两个按钮都位于单独的网格列中。当我们不能再向右滚动时,我希望右键消失,反之亦然。 我可以将scrollviewer模板中的滚动条可见性设置为: 可见性=“{TemplateBinding ComputedHorizontalScrollBarVisibility}” 它只在必要时显示滚动条,但在滚动条到达我可以绑定可见性属性的最右边或最左边位置时,不会看到滚动条中会显示的任何属性… 我真的

我已经为scrollbar(水平)创建了一个自定义模板,它现在只包含两个没有scrollbar的滚动按钮,这两个按钮都位于单独的网格列中。当我们不能再向右滚动时,我希望右键消失,反之亦然。 我可以将scrollviewer模板中的滚动条可见性设置为:

可见性=“{TemplateBinding ComputedHorizontalScrollBarVisibility}”

它只在必要时显示滚动条,但在滚动条到达我可以绑定可见性属性的最右边或最左边位置时,不会看到滚动条中会显示的任何属性…
我真的不知道该怎么做,所以任何建议都是很好的。

在WPF中滚动由管理员负责。它的
LineLeft()
LineRight()
PageLeft()
PageRight()
方法执行实际的内容滚动,并由
滚动条控件模板中的各种
重复按钮执行。它还提供了
水平偏移量
视口宽度
延伸宽度
属性,可用于确定滚动内容的位置。这些方法和属性在
ScrollViewer
类中公开

虽然我还没有尝试过,但我相信您可以检测到内容何时滚动到最右侧,如下所示:

bool isAtRightSide = HorizontalOffset >= ExtentWidth - ViewportWidth;
HorizontalOffset
属性获取滚动内容的水平偏移量。
extendwidth
属性获取数据块的水平大小。(总尺寸)

ViewportWidth
属性获取此内容的视口的水平大小

可以这样做

<MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter" />

<Style x:Key="HorizontalScrollViewerStyle"
      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 />
                 <ColumnDefinition Width="Auto" />
              </Grid.ColumnDefinitions>
              <ScrollContentPresenter Grid.Column="1" />
              <RepeatButton Command="{x:Static ScrollBar.LineLeftCommand}"
                            CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=.}">
                 <RepeatButton.Visibility>
                    <MultiBinding Converter="{StaticResource MenuScrollingVisibilityConverter}"
                                  ConverterParameter="0"
                                  FallbackValue="Visibility.Collapsed">
                       <Binding Path="ComputedHorizontalScrollBarVisibility"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                       <Binding Path="HorizontalOffset"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                       <Binding Path="ExtentWidth"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                       <Binding Path="ViewportWidth"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                    </MultiBinding>
                 </RepeatButton.Visibility>
              </RepeatButton>
              <RepeatButton Grid.Column="2"
                            Command="{x:Static ScrollBar.LineRightCommand}"
                            CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=.}">
                 <RepeatButton.Visibility>
                    <MultiBinding Converter="{StaticResource MenuScrollingVisibilityConverter}"
                                  ConverterParameter="100"
                                  FallbackValue="Visibility.Collapsed">
                       <Binding Path="ComputedHorizontalScrollBarVisibility"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                       <Binding Path="HorizontalOffset"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                       <Binding Path="ExtentWidth"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                       <Binding Path="ViewportWidth"
                                RelativeSource="{RelativeSource TemplatedParent}" />
                    </MultiBinding>
                 </RepeatButton.Visibility>
              </RepeatButton>
           </Grid>
        </ControlTemplate>
     </Setter.Value>
  </Setter>
</Style>


问题是我没有代码,因为我正在创建一个框架控件,所有内容都完全在XAML中定义。简而言之,在纯XAML中无法做到这一点。此外,如果这是你的要求,那么你应该把它放在你的问题中。然而,若您创建了一个
CustomControl
,那个么您可以将代码与XAML一起使用。