c# – 如何仅使用xaml在scrollviewer中设置滚动条的余量

前端之家收集整理的这篇文章主要介绍了c# – 如何仅使用xaml在scrollviewer中设置滚动条的余量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在滚动查看器中设置滚动条的边距.
我尝试在默认的scrollviewer样式中重写滚动条边距.只需修改样式中的边距,滚动条magin设置正确的值.但滚动条移动时,scrollviewer中的内容会保持静态.我该如何修复它还是有另一种方法来设置scrollviewer中滚动条的余量更容易吗?
  1. <Style TargetType="ScrollViewer">
  2. <Setter Property="HorizontalContentAlignment" Value="Left" />
  3. <Setter Property="VerticalContentAlignment" Value="Top" />
  4. <Setter Property="VerticalScrollBarVisibility" Value="Visible" />
  5. <Setter Property="Padding" Value="4"/>
  6. <Setter Property="BorderThickness" Value="1"/>
  7. <Setter Property="BorderBrush">
  8. <Setter.Value>
  9. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  10. <GradientStop Color="#FFA3AEB9" Offset="0"/>
  11. <GradientStop Color="#FF8399A9" Offset="0.375"/>
  12. <GradientStop Color="#FF718597" Offset="0.375"/>
  13. <GradientStop Color="#FF617584" Offset="1"/>
  14. </LinearGradientBrush>
  15. </Setter.Value>
  16. </Setter>
  17. <Setter Property="Template">
  18. <Setter.Value>
  19. <ControlTemplate TargetType="ScrollViewer">
  20. <Border CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
  21. <Grid Background="{TemplateBinding Background}">
  22. <Grid.RowDefinitions>
  23. <RowDefinition Height="*"/>
  24. <RowDefinition Height="Auto"/>
  25. </Grid.RowDefinitions>
  26. <Grid.ColumnDefinitions>
  27. <ColumnDefinition Width="*"/>
  28. <ColumnDefinition Width="Auto"/>
  29. </Grid.ColumnDefinitions>
  30.  
  31. <ScrollContentPresenter x:Name="ScrollContentPresenter"
  32. Cursor="{TemplateBinding Cursor}"
  33. Margin="{TemplateBinding Padding}"
  34. ContentTemplate="{TemplateBinding ContentTemplate}"/>
  35.  
  36. <Rectangle Grid.Column="1" Grid.Row="1" Fill="#FFE9EEF4"/>
  37.  
  38. <ScrollBar x:Name="VerticalScrollBar" Width="18"
  39. IsTabStop="False"
  40. Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
  41. Grid.Column="1" Grid.Row="0" Orientation="Vertical"
  42. ViewportSize="{TemplateBinding ViewportHeight}"
  43. `enter code here` Maximum="{TemplateBinding ScrollableHeight}"
  44. Minimum="0"
  45. Value="{TemplateBinding VerticalOffset}"
  46. Margin="0,20,0"/>
  47.  
  48. <ScrollBar x:Name="HorizontalScrollBar" Height="18"
  49. IsTabStop="False"
  50. Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
  51. Grid.Column="0" Grid.Row="1" Orientation="Horizontal"
  52. ViewportSize="{TemplateBinding ViewportWidth}"
  53. Maximum="{TemplateBinding ScrollableWidth}"
  54. Minimum="0"
  55. Value="{TemplateBinding HorizontalOffset}"
  56. Margin="-1,-1,-1"/>
  57.  
  58. </Grid>
  59. </Border>
  60. </ControlTemplate>
  61. </Setter.Value>
  62. </Setter>

解决方法

我为垂直ScrollBar制作了Margin =“10,10,20”,它工作得很好.
ScrollViewer包含一个用于测试目的的DataGrid.

XAML:

  1. <ScrollViewer HorizontalAlignment="Left" Height="152" Margin="25,42,0" VerticalAlignment="Top" Width="449">
  2. <ScrollViewer.Template>
  3. <ControlTemplate TargetType="{x:Type ScrollViewer}">
  4. <Grid x:Name="Grid" Background="{TemplateBinding Background}">
  5. <Grid.ColumnDefinitions>
  6. <ColumnDefinition Width="*"/>
  7. <ColumnDefinition Width="Auto"/>
  8. </Grid.ColumnDefinitions>
  9. <Grid.RowDefinitions>
  10. <RowDefinition Height="*"/>
  11. <RowDefinition Height="Auto"/>
  12. </Grid.RowDefinitions>
  13. <Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
  14. <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"/>
  15. <ScrollBar x:Name="PART_VerticalScrollBar" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset,Mode=OneWay,RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}" Margin="10,20"/>
  16. <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset,RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
  17. </Grid>
  18. </ControlTemplate>
  19. </ScrollViewer.Template>
  20. <DataGrid x:Name="dataGrid" ItemsSource="{Binding Mode=OneWay}">
  21. <DataGrid.DataContext>
  22. <local:MyDataCollection/>
  23. </DataGrid.DataContext>
  24. </DataGrid>
  25. </ScrollViewer>

猜你在找的C#相关文章