Отличие UWP от WinForms при обращении к элементам

212
02 апреля 2018, 21:06

В WinForms при создании элемента мы могли просто кликнуть на него - и студия создавала обработчик события для этого элемента, например

private void Button1_Click(object sender, RoutedEventArgs e)
{
}

Достаточно было просто вписать

Button1.Text = "Поменяли текст кнопки"

И всё бы заработало. Но в UWP приложении при нажатии на ту же кнопку студия создает тот же обработчик, но называет его уже

private void Button_Click(object sender, RoutedEventArgs e)
{
}

И обратится теперь к элементу интерфейса никак нельзя. Разве что в самом Xaml-e написать имя(по умолчанию его нет) и обращаться уже по нему

<Button Content="Button" **Name="btn1"** HorizontalAlignment="Left" Margin="177,85,0,0" VerticalAlignment="Top" Height="123" Width="264" Click="Button_Click"/>

И еще у самой кнопки нет аттрибута текста. Есть даже

btn1.FontSize

А текста нет. Вообщем, объясните пожалуйста для переходящих с WinForms - зачем эти вещи убрали, и что поставили им на замену?

Answer 1

Парадигма совсем другая - это развитие идей WPF. Нужно учить паттерн MVVM - без него все грустно. Все что касается отображения - пишется в xaml, та же кнопка это по сути контейнер куда ты можешь напихать еще элементов - да, даже кнопку внутрь кнопки можно хоть до посинения напихать, для того же текста внутрь надо поместить TextBlock:

<Button>
    <TextBlock>Нажми меня</TextBlock>
</Button>

из кода можно пихать в свойство Content - но так делать не надо, поскольку View полностью задается через декларативную xaml разметку. В принципе по старенькому тоже можно, но как вы заметили - нужно принудительно давать элементам имена и от изучения xaml разметки все равно никуда не деться - и будет это путь тернистым и в целом бессмысленным. Такова цена офигенной визуальной гибкости WPF относительно WindowsForm. В парадигме MVVM имена элементов нужны крайне редко - код с отображением относительно слабо связаны через привязки и команды. В частности это позволяет с легкостью разным людям работать над UI и бизнеслогикой не особо при этом пересекаясь. Ну и легкость тестирования тоже огромный плюс.

READ ALSO
Определение настроек prod/dev по connection string

Определение настроек prod/dev по connection string

Делаю небольшое веб-приложение для работы с лаками для ногтей

226
Не передаются параметры в метод

Не передаются параметры в метод

Есть такой контроллер:

224
WPF: замостить контейнер элементами

WPF: замостить контейнер элементами

Здравствуйте, сделал элемент UserControl, который может иметь разные высоту и ширинуНеобходимо создать алгоритм который будет при добавлении...

271
ASP.NET Identity валидация пользователя

ASP.NET Identity валидация пользователя

Создал класс для валидации пользователяМетод ValidateAsync возвращает, что ошибок нет (Errors

166