总结:我想指定在ScrollViewer禁用的滚动条上使用的游标。
将其粘贴到Kaxaml中并将鼠标移到禁用的垂直滚动条上。请注意,它使用的是我为ScrollViewer指定的Cross游标。将其与启用的水平滚动条上使用的箭头光标进行对比。
我不希望Cross显示禁用的垂直滚动条,因为它意味着特定操作可能不可用(这只是一个示例,我的应用程序使用不同的游标)。我更喜欢箭;任何人都可以告诉我如何做到这一点?
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Orientation="Vertical">
<ScrollViewer Height="300" Width="300" HorizontalScrollBarVisibility="Visible"
Cursor="Cross">
<Canvas Width="2000">
<Button Canvas.Left="5" Canvas.Top="5">Left</Button>
<Button Canvas.Left="1900" Canvas.Top="5">Right</Button>
</Canvas>
</ScrollViewer>
</StackPanel>
</Page>
答案 0 :(得分:1)
如果您希望滚动条上的各个按钮具有不同的光标,则需要将Cursor
设置为ScrollBar
级别,甚至可能设置为较低级别。不幸的是,ScrollBars的光标由ScrollViewer模板硬编码,因此您需要对其进行重新模板化。
这是一个简单的例子(评论后更新):
<Window x:Class="SO8067799.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="ScrollViewer">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid x:Name="Grid" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
<Grid x:Name="verticalGrid" Grid.Column="1" Cursor="Hand">
<ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
</Grid>
<Grid x:Name="horizontalGrid" Grid.Row="1" Grid.Column="0" Cursor="Hand">
<ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger SourceName="PART_VerticalScrollBar" Property="IsEnabled" Value="False">
<Setter TargetName="verticalGrid" Property="Cursor" Value="No"/>
</Trigger>
<Trigger SourceName="PART_HorizontalScrollBar" Property="IsEnabled" Value="False">
<Setter TargetName="horizontalGrid" Property="Cursor" Value="No"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel Orientation="Vertical">
<ScrollViewer Height="300" Width="300" HorizontalScrollBarVisibility="Visible">
<Canvas Width="2000">
<Button Canvas.Left="5" Canvas.Top="5">Left</Button>
<Button Canvas.Left="1900" Canvas.Top="5">Right</Button>
</Canvas>
</ScrollViewer>
</StackPanel>
</Window>