Они нигде не объявлены.
Код XAML, подобный этому:
<Canvas x:Name="dragSelectionCanvas" (Line #64)
Visibility="Collapsed" >
<Border x:Name="dragSelectionBorder" (Line #66)
Opacity="0.5" />
</Canvas>
равно
new Canvas
{
Visibility = Visibility.Collapsed,
Content = new Border { Opacity = 0.5 }
}
Вам нужна только ссылка на root элемент управления это в вашем классе xaml.cs. Вещи с именами являются просто краткими ссылками на этот объект, так что вам не нужно каждый раз go спускаться вниз по логическому дереву.
Как только вы поймете, что <SomeClass Property="5"/> == new SomeClass { Property = 5 }
все становится проще.
Например, в MVVM вы устанавливаете свойство ViewModel
. Вы можете сделать это в xaml.cs в конструкторе:
this.ViewModel = new SpecificViewModel()
- если он имеет конструктор по умолчанию
или в xaml:
<MyControl.ViewModel>
<SpecificViewModel/>
</MyControl.ViewModel>
По сути, это означает, что вы можете создать полноценный UserControl только в файле cs, например так:
public class MyControl : UserControl
{
public MyControl()
{
Content = new StackPanel { Content = new TextBlock{ Text = "Sample Text"}};
}
}
Обратите внимание, что на TextBlock нигде нет ссылок, но он все еще там. Аналогичный xaml теперь должен быть прямым для написания.
Вы, вероятно, заметили отсутствие вызова InitializeComponents()
. Это потому, что под капотом он запускает сгенерированный из XAML и заполняет this.Content
и устанавливает ссылки на объекты с именами. Отсутствие XAML означает, что нет необходимости вызывать этот метод.
Более подробную информацию можно найти здесь