ВАУ, это действительно заставило меня задуматься :) но я считаю, что нашел обходной путь, который вы можете использовать.Вам понадобится конвертер, но это единственный код, который вам нужен в C # - остальное в чистом XAML.
Я восстановил некоторые XAML на основе вашего ввода:
<Grid
VerticalAlignment="Center"
HorizontalAlignment="Left"
Background="Lime"
x:Name="m_Grid">
<Grid.RenderTransform>
<CompositeTransform
TranslateX="{Binding ActualWidth, Converter={StaticResource InverseTranslateXConverter}, ElementName=m_Grid}" />
</Grid.RenderTransform>
<Button
x:Name="m_Button"
Margin="50"
Content="Hello World" />
</Grid>
Итак, на самом деле я просто заключаю слайдер в сетку и устанавливаю TranslateXсвойство ActualWidth содержимого * -1 (выполняется с помощью конвертера):
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double d = 0;
if (double.TryParse(value.ToString(), out d))
{
return d * -1;
}
return value;
}
Чтобы показать его (вставьте), я использую простую анимацию:
<UserControl.Resources>
<Storyboard
x:Name="Storyboard1">
<DoubleAnimation
x:Name="m_Animation"
Duration="0:0:0.2"
To="0"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
Storyboard.TargetName="m_Grid"
d:IsOptimized="True" />
</Storyboard>
Это не красиво, но работает:)
[ПРАВИТЬ] Просто удалил внешнюю сетку - это было неестественно.