Ответ 1
Ниже приведен способ:
XAML:
<ScrollViewer Height="400" Width="400" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" >
<ScrollViewer.Resources>
<local:ThicknessConverter x:Key="ThicknessConverter" />
<Style TargetType="ScrollBar">
<Style.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Margin" Value="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer},Converter={StaticResource ThicknessConverter}}">
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ScrollViewer.Resources>
</ScrollViewer>
Преобразователь
public class ThicknessConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var scrollBars = FindVisualChildren<ScrollBar>(value as DependencyObject);
foreach (var scrollBar in scrollBars)
{
if (scrollBar.Orientation == Orientation.Horizontal)
{
return new Thickness(0, 0, 0, 0 - scrollBar.ActualHeight);
}
}
return new Thickness(0, 0, 0, 0);
}
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
ВЫВОД: