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