1.效果
2.代码
View
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="40" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
<RowDefinition Height="20" />
<RowDefinition Height="auto" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="5"
Grid.ColumnSpan="3"
Name="ResultScrollView"
Padding="10"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Style="{StaticResource ThickScrollViewer}">
<ItemsControl></ItemsControl>
</ScrollViewer>
<Button Grid.Row="3"
Grid.Column="1"
Command="{Binding ScrollViewToTopCmd}"
CommandParameter="{Binding ElementName=ResultScrollView}"
Visibility="{Binding ElementName=ResultScrollView ,Path=VerticalOffset ,Converter={StaticResource toTopperVisibilityConverter}}"
ToolTip="返回顶部">
<TextBlock Style="{StaticResource ToTopTextBlockStyle}"
Foreground="White"
FontSize="26" />
</Button>
</Grid>
Converter
public class ToTopperVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is null ? Visibility.Collapsed : ((double)value != 0d ? Visibility.Visible : Visibility.Collapsed);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
ViewModel
public ICommand ScrollViewToTopCmd => new RelayCommand<ScrollViewer>(s => s.ScrollToTop());