Вот версия UWP, которую я написал на основе ответа, который вы дали от здесь . Это просто демо, и вам нужно настроить его под себя.
Пожалуйста, сначала создайте пользовательский контроль, и вот код XAML в пользовательском контроле:
<Grid PointerEntered="Grid_PointerEntered" Width="265" PointerExited="Grid_PointerExited" x:Name="mygrid">
<Grid.Resources>
<local:NegatingConverter x:Key="NegatingConverter"/>
<Storyboard x:Name="Storyboard1">
<DoubleAnimation
Storyboard.TargetName="transferCurreny"
Storyboard.TargetProperty="X"
Duration="0:0:6" From="0"
To="{Binding Width,ElementName=canvas,Converter={StaticResource NegatingConverter}}"
RepeatBehavior="Forever"/>
</Storyboard>
</Grid.Resources>
<StackPanel x:Name="mystack" Height="500" Background="AliceBlue">
<StackPanel Orientation="Horizontal" x:Name="stack" Height="100">
<StackPanel.RenderTransform>
<TranslateTransform x:Name="transferCurreny" X="0"/>
</StackPanel.RenderTransform>
<Canvas x:Name="canvas" Width="{Binding ActualWidth, ElementName=stack}">
<TextBlock Text="TestTesting" FontSize="25" x:Name="txtKron" Canvas.Left="0"/>
<TextBlock Text="{Binding Text, ElementName=txtKron}" FontSize="25" Canvas.Left="{Binding Width, ElementName=canvas}"/>
</Canvas>
</StackPanel>
</StackPanel>
</Grid>
Вот код:
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e)
{
Storyboard1.Begin();
}
private void Grid_PointerExited(object sender, PointerRoutedEventArgs e)
{
Storyboard1.Stop();
}
И преобразователь:
public class NegatingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is double)
{
return -((double)value);
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if (value is double)
{
return +(double)value;
}
return value;
}
}
И есть серьезная проблема. Я столкнусь с проблемой конфликта, когда не установлю фон вышеупомянутой стековой панели mystack.