Вот пример использования ImageBrush
, учитывая, что вам не нужно видеть внешнюю сторону указанного фрейма:
<Border Height="300" Width="300">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<RectAnimation Storyboard.TargetProperty="Background.(ImageBrush.Viewport)"
To="0,0,1,1" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Border.Background>
<ImageBrush
ImageSource="http://www.gravatar.com/avatar/3736a467816b5100e6bac91847cae8b6?s=128&d=identicon&r=PG"
Viewport="0,1,1,1" TileMode="Tile" />
</Border.Background>
</Border>
В качестве метода C # (иерархический стиль, конечно, не нужен, эточуть ближе к XAML, я надеюсь, что вы можете читать C #, если нет , этот конвертер может быть очень удобным):
private Border CreateScrollingImage(string path)
{
var anim = new RectAnimation() { To = new Rect(0, 0, 1, 1), RepeatBehavior = RepeatBehavior.Forever };
Storyboard.SetTargetProperty(anim, new PropertyPath("Background.(ImageBrush.Viewport)"));
var imageConverter = new ImageSourceConverter();
return new Border()
{
Width = 300, Height = 300,
Style = new Style()
{
TargetType = typeof(Border),
Triggers =
{
new System.Windows.EventTrigger()
{
RoutedEvent = FrameworkElement.LoadedEvent,
Actions =
{
new BeginStoryboard()
{
Storyboard = new Storyboard()
{
Children =
{
anim
}
}
}
}
}
}
},
Background = new ImageBrush()
{
ImageSource = (ImageSource)imageConverter.ConvertFromString(path),
Viewport = new Rect(0, 1, 1, 1),
TileMode = TileMode.Tile
}
};
}
controls.Add(CreateScrollingImage("http://www.gravatar.com/avatar/3736a467816b5100e6bac91847cae8b6?s=128&d=identicon&r=PG"));
Возможно, вы захотите изменить Stretch
на ImageBrush
, если вам нужно, чтобы изображение было однородным.