Автоматическая прокрутка изображения - PullRequest
0 голосов
/ 04 декабря 2011

Мне нужна помощь с " Автоматическим скроллером изображений ".Сценарий довольно прост.У меня есть одна картинка, и она должна двигаться вверх, а когда она выходит за рамки, та же самая картинка появляется под собой и продолжает двигаться вверх.Вид петли.

Image-scroller

Проблема в том, что у меня нет ни единой подсказки, как сделать это в code-behind или XAML , но он должен быть написан в виде «кода позади», из-за того, с чем я его связываю.

Любой ответ приветствуется.

1 Ответ

1 голос
/ 05 декабря 2011

Вот пример использования 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&amp;d=identicon&amp;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, если вам нужно, чтобы изображение было однородным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...