Комментарии 9
if (source is VectorRoundButton)
{
VectorRoundButton control = source as VectorRoundButton;
Почему не использовать сопоставление с образцом для упрощения кода: if(source is VextorRoundButton control) ?
Поставьте Roslynator/ReSharper или подолное для автоматической замены.
Я очень давно WPF занимался, но уверен, что здесь не нужно было делать свой контрол, а нужен был всего-лишь template.
Можно было взять обычный ToggleButton и всё это реализовать в стиле в XAML.
Вот, сделал пример стиля, который делает всё тоже самое.
Немножко замечаний
1. Просто вкинуть кучу кода, причём ещё два раза один и тот же — это не совсем статья, мне кажется. Если она нацелена на тех, кто не умеет делать контролы, то они ничего не поймут.
2. Есть контрол ToggleButton, используйте его
3. Зачем нужен IsCheckable? Есть IsEnabled.
4. Для изменения стиля контролов в wpf используются… стили и шаблоны. Если нужно динамически изменять их (для чего-то же вам нужна была DependencyProperty) — используйте DynamicResource. Следовательно, свойства для иконок и цветов не нужны.
5. Если таргетите .net framework — рекомендую использовать библиотеку Bindables, сократит код для DependencyProperty до двух строк + код обработки.
6. wpf-way — это использовать биндинги. Например, ButtonImage вы меняете в code-behind, это не нужно. В итоге сами свойства вы хоть и меняете, но вообще не используете.
7. В IsCkeckedPropertChanged вы меняете руками стили хардкодом. А что если я захочу в каком-то месте другой стиль при нажатии? Это делается триггерами, завязанными на IsChecked — когда он true, то одни сеттеры, когда false — другие. Хочет пользователь поменять только что-то одно, унаследуется от стиля и поменяет. Захочет что-то своё, сделает свой стиль.
8. UserControl_MouseEnter и UserControl_MouseLeave — то же самое. Делаем триггер стиля на IsMouseOver.
1. Просто вкинуть кучу кода, причём ещё два раза один и тот же — это не совсем статья, мне кажется. Если она нацелена на тех, кто не умеет делать контролы, то они ничего не поймут.
2. Есть контрол ToggleButton, используйте его
3. Зачем нужен IsCheckable? Есть IsEnabled.
4. Для изменения стиля контролов в wpf используются… стили и шаблоны. Если нужно динамически изменять их (для чего-то же вам нужна была DependencyProperty) — используйте DynamicResource. Следовательно, свойства для иконок и цветов не нужны.
5. Если таргетите .net framework — рекомендую использовать библиотеку Bindables, сократит код для DependencyProperty до двух строк + код обработки.
6. wpf-way — это использовать биндинги. Например, ButtonImage вы меняете в code-behind, это не нужно. В итоге сами свойства вы хоть и меняете, но вообще не используете.
7. В IsCkeckedPropertChanged вы меняете руками стили хардкодом. А что если я захочу в каком-то месте другой стиль при нажатии? Это делается триггерами, завязанными на IsChecked — когда он true, то одни сеттеры, когда false — другие. Хочет пользователь поменять только что-то одно, унаследуется от стиля и поменяет. Захочет что-то своё, сделает свой стиль.
8. UserControl_MouseEnter и UserControl_MouseLeave — то же самое. Делаем триггер стиля на IsMouseOver.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как я делал user-control на WPF (VS2019, c#)