Zajumane ze stacka ale trochę poprawiłem, bo się za wcześnie odświeżał:
XAML
<Window
x:Class="markju.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:markju"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="525"
Height="350"
mc:Ignorable="d">
<Grid x:Name="layoutRoot">
<Canvas x:Name="canvas">
<TextBlock
x:Name="tb1"
Canvas.Left="-131"
FontSize="25"
Loaded="tb1_Loaded"
Text="StackOverflow is just awesome!">
<TextBlock.Resources>
<Storyboard x:Key="slide">
<DoubleAnimation
RepeatBehavior="Forever"
Storyboard.TargetName="transferCurreny"
Storyboard.TargetProperty="X"
From="0"
To="{Binding Width, ElementName=tb1}"
Duration="00:00:4" />
</Storyboard>
</TextBlock.Resources>
<TextBlock.RenderTransform>
<TranslateTransform x:Name="transferCurreny" X="0" />
</TextBlock.RenderTransform>
<TextBlock.Triggers>
<EventTrigger RoutedEvent="TextBlock.Loaded">
<BeginStoryboard Storyboard="{StaticResource slide}" />
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</Canvas>
</Grid>
</Window>
CB:
namespace markju
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void tb1_Loaded(object sender, RoutedEventArgs e)
{
tb1.Width = tb1.ActualWidth*2;
}
}
}
Aż sam byłem ciekaw, a nigdy nie byłem zbyt biegły z rysowania po canvasie w WPF.