Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
XAML (extensible Application Markup Language) to deklaratywny język znaczników używany do definiowania interfejsu użytkownika w aplikacjach WinUI. Strukturę i właściwości interfejsu użytkownika opisujesz w plikach .xaml, a logikę i zdarzenia obsługujesz w skojarzonym pliku kodu zaplecza.
Co to jest XAML?
XAML to język oparty na języku XML do tworzenia obiektów i ustawiania ich właściwości. Elementy interfejsu użytkownika — przyciski, pola tekstowe, układy — deklarujesz w znacznikach, a do reagowania na zdarzenia i manipulowania tymi elementami w czasie wykonywania używasz pliku code-behind.
Ponieważ XAML jest tekstowym formatem wymiany, projektanci i programiści mogą pracować niezależnie: projektanci tworzą strukturę wizualną w języku XAML, programiści implementują logikę w kodzie zaplecza (code-behind), a obie strony mogą wprowadzać kolejne zmiany bez wzajemnego blokowania się.
Podstawowa składnia XAML
Cały prawidłowy kod XAML jest również prawidłowym kodem XML, ale XAML dodaje własne pojęcia. Na przykład składnia elementu właściwości umożliwia ustawienie właściwości jako zagnieżdżonego elementu XML, a nie ciągu atrybutu — prawidłowy kod XML, ale z dodatkowym znaczeniem w języku XAML.
Aby uzyskać szczegółowe informacje o składni, zobacz Przewodnik składni języka XAML.
XAML i Visual Studio
Edytor XAML programu Visual Studio udostępnia funkcję IntelliSense, automatyczne uzupełnianie oraz wizualny projektant. Błędy są wyświetlane w tekście jako zygzaki przed skompilowanie. Nie musisz zapamiętywać każdej reguły składni — niech środowisko IDE cię poprowadzi.
Przestrzenie nazw XAML
Każdy plik XAML deklaruje przestrzenie nazw w elemencie głównym. Typowa strona WinUI zaczyna się od dwóch:
<Page
x:Class="Application1.BlankPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
-
Domyślna przestrzeń nazw (
xmlns=): zawiera wszystkie wbudowane kontrolki WinUI, tekst, grafika, powiązanie danych i typy stylów. Większość kodu XAML używa tej przestrzeni nazw bez prefiksu. -
Przestrzeń nazw języka XAML (
xmlns:x=): mapowana na prefiksx:, zapewnia podstawowe funkcje języka.
Przestrzeń x: nazw
| Attribute | Purpose |
|---|---|
| x:Key | Unikalny klucz zasobu w ResourceDictionary |
| x:Class | Łączy plik XAML z jego klasą code-behind |
| x:Name | Przypisuje nazwę środowiska uruchomieniowego, aby kod mógł odwoływać się do elementu |
| x:Uid | Oznacza elementy zlokalizowanego podstawienia zasobów |
| Typy wewnętrzne XAML | Wyraża proste wartości (na przykład x:Boolean) jako elementy obiektu |
Mapowanie typów niestandardowych
Aby używać własnych typów lub typów bibliotek innych firm w kodzie XAML, zadeklaruj prefiks przestrzeni nazw, który odpowiada przestrzeni nazw kodu:
xmlns:myTypes="using:myCompany.myTypes"
Następnie odwołaj się do tych typów z prefiksem:
<myTypes:CustomButton/>
Aby uzyskać szczegółowe informacje, w tym zagadnienia dotyczące języka C++/CX, zobacz Przestrzenie nazw XAML i mapowanie przestrzeni nazw.
Przestrzenie nazw projektanta i zgodności
W kodzie XAML generowanym przez narzędzia często można zobaczyć prefiksy d: (projektant) i mc: (zgodność znaczników). Służą do obsługi narzędzi projektowych i można je bezpiecznie ignorować w czasie działania. Aby uzyskać szczegółowe informacje, zobacz Inne przestrzenie nazw XAML.
Rozszerzenia znaczników
Rozszerzenia znaczników umożliwiają ustawienie właściwości na coś, czego nie można wyrazić jako zwykłego ciągu — na przykład odwołanie do zasobu udostępnionego lub powiązania danych. Używają składni nawiasu klamrowego:
<Button Style="{StaticResource SearchButtonStyle}"/>
Bez {StaticResource} trzeba użyć rozbudowanej składni elementu właściwości, aby przypisać Style. Rozszerzenia znaczników pozwalają zachować zwięzłość kodu XAML.
środowisko wykonawcze systemu Windows XAML obsługuje następujące rozszerzenia znaczników:
| Extension | Purpose |
|---|---|
| {x:Bind} | Powiązanie danych w czasie kompilacji (najlepsza wydajność) |
| {Binding} | Powiązanie danych środowiska uruchomieniowego |
| {StaticResource} | Odwołuje się do wpisu ResourceDictionary za pomocą klucza |
| {ThemeResource} | Podobnie jak {StaticResource}, ale aktualizuje się, gdy motyw aplikacji ulegnie zmianie |
| {TemplateBinding} | Wiązanie z właściwością elementu nadrzędnego szablonu kontrolki |
| {RelativeSource} | Wiązanie względem szablonu nadrzędnego |
| {CustomResource} | Zaawansowane wyszukiwanie zasobów niestandardowych |
| {x:Null} | Jawnie ustaw wartość dopuszczaną do wartości null null |
Rozszerzenia znaczników mogą być zagnieżdżane; to najbardziej zagnieżdżone jest oceniane jako pierwsze.
Events
Dołącz programy obsługi zdarzeń w języku XAML, określając zdarzenie jako atrybut i nazwę metody obsługi jako jego wartość:
<Button Click="showUpdatesButton_Click">Show updates</Button>
Kompilator oczekuje odpowiedniej metody w pliku code-behind z prawidłowym podpisem delegata:
private void showUpdatesButton_Click(object sender, RoutedEventArgs e)
{
// your code
}
void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Microsoft::UI::Xaml::RoutedEventArgs const&);
Uwaga / Notatka
W języku C++/CX każda strona XAML ma dwa pliki z kodem: nagłówek (.xaml.h) i implementację (.xaml.cpp).
Aby uzyskać więcej informacji, zobacz Omówienie zdarzeń i zdarzeń kierowanych.
Słowniki zasobów
ResourceDictionary przechowuje obiekty wielokrotnego użytku — pędzle, style, szablony — identyfikowane za pomocą x:Key. Zasoby mogą znajdować się w sekcji zasobów strony lub w osobnym .xaml pliku. Aby uzyskać pełne wyjaśnienie, zobacz temat ResourceDictionary i odwołania do zasobów XAML.
XAML i XML
XAML to nadzbiór kodu XML z kilkoma elementami, które należy znać:
- Uwzględniana wielkość liter: nazwy elementów i atrybutów muszą być dokładnie zgodne.
-
xml:lang: Prawidłowy w języku XAML, ale odpowiada zachowaniu środowiska uruchomieniowego na poziomie frameworka, a nie zachowaniu parsera. - Kodowanie: obsługiwane są tylko formaty UTF-8 i UTF-16.
Zakresy nazw XAML
Nazwy przypisane za pomocą x:Name muszą być unikatowe w ich zakresie nazw. Zakresy nazw są szczególnie istotne wewnątrz szablonów kontrolek, gdzie nazwy są ograniczone do szablonu, a nie do strony. Aby uzyskać szczegółowe informacje, zobacz XAML namescopes (Zakresy nazw XAML).
Porady dotyczące wydajności
- Definiuj często używane pędzle jako zasoby
SolidColorBrushzamiast powtarzać literały kolorów. - Umieść zasoby współdzielone między stronami w
Application.Resources; zasoby właściwe dla danej strony pozostaw lokalnie na tej stronie. - Przed wysyłką usuń nieużywane zasoby (klucze bez
{StaticResource}odwołań). - Unikaj zastępowania szablonów kontrolek — wartości domyślne są już zoptymalizowane pod kątem wydajności ładowania.
- Używaj
Borderi kontenerów układu zamiast rysować ten sam piksel wiele razy (nadmiarowe rysowanie). - Użyj domyślnych szablonów elementów dla
ListViewiGridView; logikaPresenterjest zoptymalizowana pod kątem dużych list.
Aby uzyskać więcej wskazówek, zobacz Optymalizowanie znaczników XAML.
Debugowanie kodu XAML
Nie można ustawić punktów przerwania w .xaml plikach, ale Visual Studio zapewnia inną pomoc:
- Czas projektowania: znaczniki błędów i zygzaki są wyświetlane w tekście podczas wpisywania.
-
Środowisko uruchomieniowe: Niepowodzenia parsowania powodują zgłoszenie wyjątku
XamlParseException(lub podobnego wyjątku strukturalnego w języku C++/CX) z kontekstem numeru wiersza w pliku XAML.
Aby uzyskać informacje na temat obsługi błędów w czasie wykonywania, zobacz Obsługa wyjątków dla aplikacji WinUI w języku C# lub Visual Basic. Aby rozpocząć sesję debugowania, zobacz Rozpoczynanie sesji debugowania.