Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232

Storyboard restart (не перегрузом окна)

11.03.2020, 22:16. Показов 3197. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую,
Не пойму каким образом этот StoryBoard можно перегрузить кнопкой или через Binding? Но не перезапуском окна?
К чему так сделали, не пойму.
XML
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
<Grid>
 
<Button
            x:Name="input_btn"
            Width="60"
            Height="40"
            Margin="0,10,20.4,0"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Click="input_btn_Click"
            Content="вход">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard TargetName="MyLine1">
                            <DoubleAnimation
                                Storyboard.TargetProperty="X2" 
                                To="200"
                                Duration="0:0:5" />
                           
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
 
        <Button
            x:Name="output_btn"
            Width="60"
            Height="40"
            Margin="0,68,20.4,0"
            HorizontalAlignment="Right"
            VerticalAlignment="Top"
            Click="output_btn_Click"
            Content="выход">
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard TargetName="MyLine1">
                            
                            <DoubleAnimation
                                Storyboard.TargetProperty="X1"
                                To="200"
                                Duration="0:0:5" />
                            <DoubleAnimation
                                Storyboard.TargetProperty="X1"
                                To="200"
                                Duration="0:0:5" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Button.Triggers>
        </Button>
 
        <Line
            Name="MyLine1"
            Stroke="Aqua"
            StrokeThickness="4"
            X1="40"
            X2="50"
            Y1="40"
            Y2="40" />
 
    </Grid>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 22:16
Ответы с готовыми решениями:

You need to restart your computer. Hold down the Power button for several seconds or press the Restart button
Доброго времени суток, жители форума! При загрузке ОС MAC выдает ошибку &quot;You need to restart your computer. Hold down the Power button...

Очень нужно подсобить с перегрузом оператора пресечения
Значит так есть код выполняет пересечения множеств. Но проблема в том что не могу сделать перегруз. Делаю перегруз, у компилятора ор выше...

Повтор StoryBoard
Здравствуйте. Как сделать, чтобы после окончания StoryBoard выполнялся заново? Именно весь, с заново рассчитывающимися рандомными...

58
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 17:14  [ТС]
Студворк — интернет-сервис помощи студентам
Элд Хасп,

C#
1
2
3
4
5
6
7
8
9
10
 private RelayCommand _enabledCommand;
        public RelayCommand EnabledCommand => _enabledCommand
            ?? (_enabledCommand = new RelayCommand(
                p =>
                {
                    Start = false;
                    IsEnabled = bool.Parse(p.ToString());
                    Start = true;
                },
                p => bool.TryParse(p.ToString(), out bool value) && IsEnabled != value));
Несмотря на то, что знаю что такое Command и стал активно пользоваться. Не пойму что тут делается. И студия не принимает. Можно по старинке?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 17:37
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
И студия не принимает. Можно по старинке?
Я вас наверное старая версия или Студии, или Framework или C# - не принимает лямбды.
Сейчас скину вариант, на обычных методах.

Добавлено через 17 минут
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
по старинке
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private RelayCommand _enabledCommand;
        public RelayCommand EnabledCommand => _enabledCommand
            ?? (_enabledCommand = new RelayCommand(EnabledMethod, EnabledCanMethod));
        private void EnabledMethod(object parameter)
        {
            Start = false;
            IsEnabled = bool.Parse(p.ToString());
            Start = true;
        }
        private bool EnabledCanMethod(object parameter)
        {
            return bool.TryParse(parameter.ToString(), out bool value) && IsEnabled != value));
        }
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 18:24  [ТС]
Элд Хасп,

Все равно не работает! RelayCommand словно как первый раз видит.
И не пойму, что вы там пытаетесь получить?


Я пользуюсь вот такой имплементацией Command. Просто, чисто и понятно.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public ICommand Save_command { get; private set; } // объявление
 
 MAinWindowViewModel()
 
{
 
   Save_command = new RelayCommand(Save); // в конструкторе
 
}
 
  public void Save() // сам метод
  {
 
      // чего-нибудь делать
 
  }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 19:11
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Все равно не работает! RelayCommand словно как первый раз видит.
И не пойму, что вы там пытаетесь получить?
Возьмите классы по этим ссылкам

Новая реализация OnPropertyChangedClass [WPF, Элд Хасп]

Новая реализация RelayCommand с исправлениями от proa33 и kolorotur [WPF, Элд Хасп]

Добавлено через 1 минуту
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Я пользуюсь вот такой имплементацией Command
У меня тоже самое в варианте без лямбд.

Добавлено через 56 секунд
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Все равно не работает! RelayCommand словно как первый раз видит.
И не пойму, что вы там пытаетесь получить?
Покажите скрин кода с ошибкой.
И полный текст сообщения ошибки.

Добавлено через 2 минуты
Для совсем "древних" EF и Студий
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        //private RelayCommand _enabledCommand;
        public ViewModel()
        {
            EnabledCommand = new RelayCommand(EnabledMethod, EnabledCanMethod);
        }
        public RelayCommand EnabledCommand { get; }
            //=> _enabledCommand
            //?? (_enabledCommand = new RelayCommand(EnabledMethod, EnabledCanMethod));
 
        private void EnabledMethod(object parameter)
        {
            IsEnabled = bool.Parse(parameter.ToString());
        }
        private bool EnabledCanMethod(object parameter)
        {
            return bool.TryParse(parameter.ToString(), out bool value) && IsEnabled != value));
        }
    }
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 19:43  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Покажите скрин кода с ошибкой.
c RelayCommand вроде разрешилось.

а остальное, смотрите скин.

И зачем что-то делаем со строками. Они тут вообще ни с какого боку. У меня свойства свойства тупо (Bool)!
Миниатюры
Storyboard restart (не перегрузом окна)  
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 19:49  [ТС]
Классы по ссылкам не стал брать. Это ужас какой-то, да еще и бардак. Мне не понравилось.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 20:30
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
И зачем что-то делаем со строками. Они тут вообще ни с какого боку. У меня свойства свойства тупо (Bool)!
Потому, что из параметра команды (в данном случае) поступает строка - посмотрите XAML.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
а остальное, смотрите скин.
Вы, что за древность используете...
C#
1
2
3
4
5
        private bool EnabledCanMethod(object parameter)
        {
            bool value;
            return bool.TryParse(parameter.ToString(), out value) && IsEnabled != value));
        }
А что со строкой EnabledCommand = new RelayCommand(EnabledMethod, EnabledCanMethod); сказать не могу. Это зависит от используемой вами реализации RelayCommand.

Вы же не стали брать, ту на которую я рассчитывал.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Классы по ссылкам не стал брать. Это ужас какой-то, да еще и бардак. Мне не понравилось.
Если вы ориентироваться на то, что вам нравится, боюсь вы далеко не уедете.
Пока у вас самого ещё нет опыта, учитесь, осваивайте новые, разбирайтесь почему лучше не так как вам нравится....

Добавлено через 6 минут
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Я пользуюсь вот такой имплементацией Command. Просто, чисто и понятно.
У вас какая-то обрезанная реализация RelayCommand.
Она не принимает параметр.
Такая реализация используется, но в отдельных случаях.
И в большинстве случаев неудобна.

Один из плюс команды, по сравнению обработчиком, это возможность передачи параметра в команду.
Допусти в моём коде используется одна и та же команда для двух разных по функционалу кнопока.
Различное действие команды (в данном случае) обеспечивается разными передаваемыми в неё параметрами CommandParameter="..."

Прочитайте тему WPF команды и MVVM. Часть 1. [WPF, Элд Хасп]
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 20:40  [ТС]
что-то мы уехали не туда... всего-то надо два долбанных дата-триггера включить.

Уехали в Command, зачем? У меня два события СВ, застряли в нестыковках реализаций. Уехали в строки непонятные... хотя мне тупо нужно bool.
Я запутался.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если вы ориентироваться на то, что вам нравится, боюсь вы далеко не уедете.
Пока у вас самого ещё нет опыта, учитесь, осваивайте новые, разбирайтесь почему лучше не так как вам нравится....
Я применяю код который я понимаю. Иначе через месяц все сначала. И ехать мне далеко не надо. Да и не требуется.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 21:01
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
что-то мы уехали не туда... всего-то надо два долбанных дата-триггера включить.
Уехали в Command, зачем? У меня два события СВ, застряли в нестыковках реализаций. Уехали в строки непонятные... хотя мне тупо нужно bool.
Я запутался.
Потому, что вы взялись за то на, что у вас не хватает знаний.
Привязки, INPC, команды - это всё азы.
Вы даже не знаете, что такое разные перегрузки методов, конструкторов.
И вы не хотите это осваивать, потому что вам "не нравится".

А вы берётесь за WPF анимацию! А это требует знания всего вышеперечисленного.
Я не знаю как вам объяснить с таким вашим уровнем знания.

Я хотел дать вам рабочий пример, но вы используете какую-то древнюю версию Студии.

Дайте тогда пример VM которая работает в вашей студии - адаптирую под неё.
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 21:28  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Потому, что вы взялись за то на, что у вас не хватает знаний.
Привязки, INPC, команды - это всё азы.
Приложение, которое я делаю (имеет сотню привязок и свойств, десяток конвертеров разного назначения. Десяток самодельных контролов уже работают.
Уже есть несколько ViewModels. Есть и анимация (немного управляется по другому). И много чего еще. Все это работает.

Ума не приложу как я это смог сделать все с таким низким уровнем знаний!? Да уровень знаний невысок, несравним с вашим. Но и у вас есть недостаток. Вы пишите
простот нечитаемый код. На ровном месте такие усложнения.

Сейчас нужно добавить еще одну анимацию. Если WPF тупо не способен два дата-триггера включить из CB и для этого нужны "затычки", то это уже другой вопрос.

Добавлено через 17 минут
Элд Хасп,

Если возможно давайте начнем все сначала.

1. Первый вариант. Исправно работающий XAML, где StoryBoard реагирует на события кнопок. StoryBoard в теле кнопки.

2. Подозревая то, что WPF не способен работать со StoryBoard, которая сама по себе, т.е. ни в чьем теле не находится. Запихнул ее в тело в line. XAML ошибок не дает но и не работает. Оказывается привязки подвели! Нужно писать "заплатки".

3. Возможно все-таки есть другой способ где StoryBoard сама по себе, а line сама по себе.

Сейчас выложу тест проект.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 21:43
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Если WPF тупо не способен два дата-триггера включить из CB и для этого нужны "затычки", то это уже другой вопрос.
Я вам показал 2 или 3 способа.
Как ещё показать - не знаю.

Где вы в этом коде увидели сложности тоже не пойму.
Там всё используется самое элементарное, из примеров самых распространённых учебников.

Причины почему у вас не получается просто - это сделать я тоже описал.
DataTrigger в XAML не может установить две конкурирующие анимации в одно свойство.
Ну, не рассчитан он на это!

В коде это делается очень просто. Пример я тоже дал.
Но вы за своей реликтовой студии не можете его запустить.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Ума не приложу как я это смог сделать все с таким низким уровнем знаний!? Да уровень знаний невысок, несравним с вашим.
Вы даже не представляете какие программы я видел.
Размер и количество программ не сколько не говорит об уровне знаний.
Видел таких мастодонтов (огромные программы написанные "древними" способами) - просто диву даёшься!
Сам тоже я писал профессионально когда ООП только зарождалось.
Этим вы меня не удивите.
Не хотите учиться - это ваше дело.

Я просто в данном случае объясняю, что простого способа сделать то, что вы хотите "в две строки" нет.
А способы "в пять строк" уже не хватает у вас знаний понять.

Ещё проще я не знаю как.
Поэтому и пишу вам "дайте свой пример VM". Такой какой вы понимаете и работающий у вас.

Добавлено через 2 минуты
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
2. Подозревая то, что WPF не способен работать со StoryBoard, которая сама по себе, т.е. ни в чьем теле не находится. Запихнул ее в тело в line. XAML ошибок не дает но и не работает. Оказывается привязки подвели! Нужно писать "заплатки".
Чтобы привязки работали нужно или DP свойство, или свойство с INPC.
По другому никакой триггер работать не будет.
Только так и не иначе.

INPC - это не заплатка. Это ОБЯЗАТЕЛЬНЫЙ интерфейс для VM работающей с WPF.

Добавлено через 3 минуты
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
3. Возможно все-таки есть другой способ где StoryBoard сама по себе, а line сама по себе.
Если делать в CB, то StoryBoard вовсе не нужен.
Этот тип сделан только с целью задать вот такую строку
C#
1
                MyLine1.BeginAnimation(Line.X2Property, doubleAnimation);
Все остальные его возможности это "плюшки" для различных способов задания этой строки.
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 22:01  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я просто в данном случае объясняю, что простого способа сделать то, что вы хотите "в две строки" нет.
А способы "в пять строк" уже не хватает у вас знаний понять.
Дело не в количестве строк, а в качестве. Можно в двух строках написать- черт ногу сломит (как вы выше изобразили). А можно в десяти где все читаемо и опрятно.


Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это ОБЯЗАТЕЛЬНЫЙ интерфейс для VM работающей с WPF.
Да не обязательный он! Не имею ни одного пока и все работает так как я хочу. А выглядит он как чистой воды заплатка.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если делать в CB, то StoryBoard вовсе не нужен.
Да не нужно мне в CB делать! Мне нужно им из CB управлять. Это же азы управления WPF как вы говорите, если WPF не умеет, то это уже другой вопрос.
Позже, уже в приложении перейду на VM, т.к. само приложение базируется на VM.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 22:21
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Дело не в количестве строк, а в качестве. Можно в двух строках написать- черт ногу сломит. А можно в десяти где все читаемо и опрятно.
В кавычках - значит иносказательно.
Под количество строк я имел виду уровень знаний необходимых для понимания.
Так сказать "простоту" написанного.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Да не обязательный он! Не имею ни одного пока и все работает так как я хочу. А выглядит он как чистой воды заплатка.
Значит вы не меняете данные для представления из VM.
И в самом представлении у вас каждое свойство имеет ОДНУ привязку.
ТО есть данные у вас всегда передаются от View к свойству VM.

Триггер же реагирует на изменение значения свойства VM.
То есть здесь нужна обратная связь от VM к View.
А единственная связь для свойств, которая для этого предусмотрена - это INPC.
Другой возможности нет.
Все претензии - к MS.

Это даже не только WPF так построена.
Вся структура Net и приложений для этой платформы построена на этом - об изменении данных извещают события.
Для разных типов - разные события.

В WPF предусмотрено отслеживания 3 событий:
INotifyPropertyChanged.PropertyChanged - для свойств
INotifyCollectionChanged.CollectionChang ed - для коллекций
ICommand.CanExecuteChanged - для команд.

Хотите, что бы WPF View могла отслеживать изменения в значениях свойств VM - придётся реализовывать поддержку через INPC

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Да не нужно мне в CB делать! Мне нужно им из CB управлять. Это то азы управления WPF, позже, уже в приложении перейду на VM, т.к. само приложение базируется на VM.
Чем отличается "управлять из CB" от "делать в CB"?
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 22:31  [ТС]
Элд Хасп,
добавил проект
Вложения
Тип файла: zip Drawing_line.zip (132.4 Кб, 1 просмотров)
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
13.03.2020, 22:33  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чем отличается "управлять из CB" от "делать в CB"?
StoryBoard в XAML, а запуск и стоп в CB или в VM! тупо одна или две булевы команды.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 23:23
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
StoryBoard в XAML, а запуск и стоп в CB или в VM! тупо одна или две булевы команды.
Вот так
XML
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
            <Line.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Input}">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation
                                            Storyboard.TargetProperty="X2"
                                            From="40"
                                            To="200"
                                            Duration="0:0:5" />
                                        <DoubleAnimation
                                            Storyboard.TargetProperty="X1"
                                            From="40"
                                            To="40"
                                            Duration="0:0:1" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                        </DataTrigger>
 
                        <DataTrigger Binding="{Binding Input}">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation
                                            Storyboard.TargetProperty="X1"
                                            From="40"
                                            To="200"
                                            Duration="0:0:5" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Line.Style>
        </Line>
В принципе не выйдет!
Если прописывать в стиле, то только ОДНА анимация для ОДНОГО свойства.
Иначе анимации начнут конфликтовать.

Почему.... блин! Даже не знаю как вам проще объяснить.
Может вам достаточно будет принять это как аксиому?

Поэтому придумайте как можно запускать ваше действие ОДНОЙ анимацией для ОДНОГО свойства.
Я тоже подумаю, но на вскидку простых вариантов в голову не приходит.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 23:39
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
добавил проект
Без INPC триггер, в принципе, работать не будет!
Не только триггер. Никакие изменения в VM - View не отобразит.
Без INPC работает только однократное чтение при инициализации VM.
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
41
42
43
44
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Shapes;
 
namespace Drawing_line
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        #region Событие PropertyChanged и Метод для вызова события PropertyChanged
        /// <summary>Событие для извещения об изменения свойства</summary>
        public event PropertyChangedEventHandler PropertyChanged;
 
        /// <summary>Метод для вызова события извещения об изменении свойства</summary>
        /// <param name="propertyName">Изменившееся свойство</param>
        public void OnPropertyChanged([CallerMemberName]string propertyName = "")
            => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        #endregion
 
        public MainWindow()
        {
            InitializeComponent();
 
            /// ОЧЕНЬ плохая строчка. 
            /// В будушем поймаете очень много проблем из-за такого кода!
            this.DataContext = this;
        }
 
        // создаем свойство  
        private bool _input;
        public bool Input
        {
            get { return _input; }
            set
            {
                _input = value;
                OnPropertyChanged();
            }
 
        }
Вот в таком виде у вас не работает?
C#
33
34
35
36
37
38
39
40
41
42
43
44
        // создаем свойство  
        private bool _input;
        public bool Input
        {
            get => _input;
            set
            {
                _input = value;
                OnPropertyChanged();
            }
 
        }
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 23:57
Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
StoryBoard в XAML
Trigger и DataTrigger работают на сравнение, а не на событие.
Обязательно должно Value с чем сравниваться
Значение по умолчанию у него - null.
И сравнивая с ним любое другое значение будет false.
Поэтому Trigger не будет срабатывать.

Должно быть так
XML
104
                        <DataTrigger Binding="{Binding Input}" Value="true">

Так же из-за ограничений при использовании в Стилях нельзя задать событие Completed. Его можно задавать только в при использовании в Triggers. Поэтому анимация в Стилях удерживает свойство. И следующая анимация "ломает" предыдущую.

Вот так нельзя.
XML
107
                                    <Storyboard Completed="Storyboard_Completed">
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
13.03.2020, 23:59
кружок-ДДТ, есть расширение к XAML Microsoft.Expression.Interactions.dll
Посмотрите эту библиотеку - возможно там найдёте то, что нужно вам.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
14.03.2020, 08:44
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я тоже подумаю, но на вскидку простых вариантов в голову не приходит.
кружок-ДДТ, проще следующего ничего в голову не приходит

CB Окна
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
41
42
43
44
45
46
47
48
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Shapes;
 
namespace Drawing_line
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        #region Событие PropertyChanged и Метод для вызова события PropertyChanged
        /// <summary>Событие для извещения об изменения свойства</summary>
        public event PropertyChangedEventHandler PropertyChanged;
 
        /// <summary>Метод для вызова события извещения об изменении свойства</summary>
        /// <param name="propertyName">Изменившееся свойство</param>
        public void OnPropertyChanged([CallerMemberName]string propertyName = "")
            => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        #endregion
 
        public MainWindow()
        {
            InitializeComponent();
 
            /// ОЧЕНЬ плохая строчка. 
            /// В будушем поймаете очень много проблем из-за такого кода!
            this.DataContext = this;
        }
 
        // создаем свойство  
        private bool? _input;
        public bool? Input
        {
            get
            {
                return _input;
            }
 
            set
            {
                _input = value;
                OnPropertyChanged();
            }
 
        }
XAML
XML
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<Window
    x:Class="Drawing_line.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:Drawing_line"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="525"
    Height="350"
    mc:Ignorable="d">
    <Window.Resources>
        <Storyboard x:Key="Storyboard.Draw">
            <DoubleAnimation
                                            Storyboard.TargetProperty="X2"
                                            From="40"
                                            To="200"
                                            Duration="0:0:5" />
            <DoubleAnimation
                                            Storyboard.TargetProperty="X1"
                                            From="40"
                                            To="40"
                                            Duration="0:0:1" />
        </Storyboard>
        <Storyboard x:Key="Storyboard.Erase">
            <DoubleAnimation  Completed="Storyboard_Completed"
                                            Storyboard.TargetProperty="X2"
                                            From="40"
                                            To="200"
                                            Duration="0:0:5" />
            <DoubleAnimation
                                            Storyboard.TargetProperty="X1"
                                            From="200"
                                            To="200"
                                            Duration="0:0:5" />
        </Storyboard>
 
    </Window.Resources>
 
    <Grid>
 
        <!--  Вариант 1 начало Вариант 1 начало Вариант 1 начало Вариант 1 начало  -->
 
        <StackPanel>
 
            <Button
                x:Name="input_btn"
                Click="input_btn_Click"
                Content="вход (основан на event trigger)">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard TargetName="MyLine1">
                                <DoubleAnimation
                                    Storyboard.TargetProperty="X2"
                                    From="40"
                                    To="200"
                                    Duration="0:0:5" />
                                <DoubleAnimation
                                    Storyboard.TargetProperty="X1"
                                    From="40"
                                    To="40"
                                    Duration="0:0:1" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>
 
            <Button
                x:Name="output_btn"
                Click="output_btn_Click"
                Content="выход (основан на event trigger)">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard TargetName="MyLine1">
                                <DoubleAnimation
                                    Storyboard.TargetProperty="X1"
                                    From="40"
                                    To="200"
                                    Duration="0:0:5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>
 
            <Button
                x:Name="input_btn_Copy"
                Click="input_btn_Copy_Click"
                Content="вход (основан binding)" />
 
            <Button
                x:Name="output_btn_Copy"
                Click="output_btn_Copy_Click"
                Content="выход (основан на binding)" />
 
        </StackPanel>
 
 
        <Line
            Name="MyLine1"
            Stroke="Aqua"
            StrokeThickness="4"
            X1="40"
            X2="40"
            Y1="140"
            Y2="140" />
 
 
 
        <!--  Вариант 1 конец Вариант 1 конец Вариант 1 конец Вариант 1 конец  -->
 
 
        <!--  Вариант 2 начало Вариант 2 начало Вариант2 начало Вариант 2 начало  -->
 
 
        <Line
            Name="MyLine2"
            Stroke="OrangeRed"
            StrokeThickness="4"
            X1="40"
            X2="40"
            Y1="180"
            Y2="180">
 
            <Line.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Input}" Value="true">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard x:Name="BeginStoryboardDraw" Storyboard="{StaticResource Storyboard.Draw}"/>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <StopStoryboard BeginStoryboardName="BeginStoryboardDraw"/>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
 
                        <DataTrigger Binding="{Binding Input}" Value="false">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard x:Name="BeginStoryboardErase" Storyboard="{StaticResource Storyboard.Erase}"/>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <StopStoryboard BeginStoryboardName="BeginStoryboardErase"/>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Line.Style>
        </Line>
 
 
        <!--  Вариант 2 конец Вариант 2 конец Вариант 2 конец Вариант 2 конец  -->
 
 
    </Grid>
</Window>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2020, 08:44

StoryBoard vs View
Подскажите, сейчас штудирую XCODE по книжке, которая уже устарела (в то время самой актуальной версией iPhone был 4S). Так вот вопрос: ...

Иерархия StoryBoard
Вопрос простой. В родовой View я создаю еще какой-нибудь контейнер, пусть будет Scroll View. Далее я хочу создать какую-нибудь кнопку,...

Запуск Storyboard от property
Привет всем, что-то смотрю примеры в сети. все Storyboard запускаются от trigger разных внутри всяких там контролов. А если у меня...

Проблема с storyboard.settarget
Здравствуйте. Проблема с кодом из книги: storyboard.setTarget и storyboard.setTargetProperty выдают ошибки ...

MVC storyboard+ViewController
Добрый день коллеги, накипело несколько вопросов: 1. Где лучше кастомизировать UI элементы...До этого все делалось в UIViewContoller ? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru