powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Динамический контроль времени анимации
5 сообщений из 5, страница 1 из 1
Динамический контроль времени анимации
    #37571176
OlegDnepr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форме WPF размещены две кнопки Button с именами Anm1 и cmd1. При нажатии на кнопку cmd1 кнопка Anm1 за 80 сек. плавно увеличивается от 40 до 400 пикселей. Тут вопросов нет, код стандартный и нормально работает.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="147" Width="525">
    
    <Grid Height="111">
        <Button Content="Button" Height="29" HorizontalAlignment="Left" Margin="18,14,0,0" Name="Anm1" VerticalAlignment="Top" Width="40" />
        <Button Content="Button" Height="29" HorizontalAlignment="Left" Margin="18,62,0,0" Name="cmd1" VerticalAlignment="Top" Width="144" />
    </Grid>
    
    <Window.Triggers>
        <EventTrigger SourceName="cmd1" RoutedEvent="Button.Click">
            <BeginStoryboard Name="Stb1">
                <Storyboard>
                    <DoubleAnimation
                        Storyboard.TargetName="Anm1" Storyboard.TargetProperty="Width"
                        From="40" To="400" Duration="0:1:10"></DoubleAnimation>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
    
</Window>



Однако, когда мне потребовалось динамически вывести сквозное время анимации на TextBox или на Label просто в секундах, без разбиения на минуты и часы, тут я запарился и ничего не смог сделать. Help!!! Заранее благодарен. (Язык C#)
...
Рейтинг: 0 / 0
Динамический контроль времени анимации
    #37571513
prBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegDnepr,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 public partial class MainWindow : Window
    {

        public double MyDurationDouble
        {
            get { return (double)GetValue(MyDurationDoubleProperty); }
            set { SetValue(MyDurationDoubleProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyDurationDouble.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MyDurationDoubleProperty =
            DependencyProperty.Register("MyDurationDouble", typeof(double), typeof(MainWindow), new PropertyMetadata((o, e) => 
            {
                (o as MainWindow).DurationRefresh();
            }));



        void DurationRefresh()
        {
            MyDuration = new Duration(TimeSpan.FromSeconds(MyDurationDouble));
        }

        public Duration MyDuration
        {
            get { return (Duration)GetValue(MyDurationProperty); }
            set { SetValue(MyDurationProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MyDuration.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MyDurationProperty =
            DependencyProperty.Register("MyDuration", typeof(Duration), typeof(MainWindow), null);

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;


        }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<Window.Triggers>
        <EventTrigger SourceName="cmd1" RoutedEvent="Button.Click">
            <BeginStoryboard Name="Stb1">
                <Storyboard>
                    <DoubleAnimation
                        Storyboard.TargetName="Anm1" Storyboard.TargetProperty="Width"
                        From="40" To="400" Duration="{Binding MyDuration,Mode=TwoWay}"></DoubleAnimation>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <TextBox Width="40" Height="50" VerticalAlignment="Top" HorizontalAlignment="Left" Text="{Binding MyDurationDouble,Mode=TwoWay}"> </TextBox>
        <Grid Height="111" Grid.Row="1">
            <Button Content="Button" Height="29" HorizontalAlignment="Left" Margin="18,14,0,0" Name="Anm1" VerticalAlignment="Top" Width="40" />
            <Button Content="Button" Height="29" HorizontalAlignment="Left" Margin="18,62,0,0" Name="cmd1" VerticalAlignment="Top" Width="144" />
        </Grid>
    </Grid>
</Window>
...
Рейтинг: 0 / 0
Динамический контроль времени анимации
    #37571746
OlegDnepr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prBoris! Я тщательно прокопировал Ваш код в свой редактор (у меня стоит VS Ultimate 2010) Но повёл он себя странно. В исходном положении TextBox показывает “0”, и этот ноль остаётся на протяжении всей анимации. Также непонятно, откуда берётся длительность анимации, которую Вы заменили привязкой – всё стало происходить гораздо быстрее. Код Ваш довольно мудрёный, и мне, как новичку в WPF, довольно сложно в нём разобраться. Свою просьбу я разместил ещё на одном форуме, где программист с ником prBoris показал свой вариант. Этот код покороче, но главное – заработал сразу. Может Вам будет интересно, даю адрес: http://www.cyberforum.ru/wpf-silverlight/thread405318.html#post2277246 В любом случае, спасибо.
...
Рейтинг: 0 / 0
Динамический контроль времени анимации
    #37571760
OlegDnepr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, ошибся, с ником alexsave
...
Рейтинг: 0 / 0
Динамический контроль времени анимации
    #37572776
OlegDnepr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый prBoris! Извините, протупил. При более подробном рассмотрении, оказалось, что Ваш код прекрасно работает. Дело в том, что Вы по-своему поняли мой вопрос. Ваш код динамически управляет скоростью (длительностью) анимации, а я имел в виду динамическое выведение текущего времени анимации на TextBox. Но всё, что не делается – всё к лучшему. Ведь такой код тоже пригодится в моей работе. Спасибо, желаю успеха.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Динамический контроль времени анимации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]