Udostępnij przez


Używanie danych czasu projektowania z projektantem XAML w programie Visual Studio

Niektóre układy są trudne do wizualizacji bez danych. W tym dokumencie zapoznamy się z jednym z podejść, które deweloperzy pracujący nad projektami komputerowymi mogą używać do pozorowania danych w projektancie XAML. Ta metoda jest wykonywana przy użyciu istniejącej przestrzeni nazw „d:”, którą można zignorować. Dzięki temu podejściu można szybko dodawać dane testowe do swoich stron lub kontrolek, bez potrzeby tworzenia pełnego, symulowanego Modelu ViewModel, lub po prostu przetestować, jak zmiana właściwości może wpłynąć na aplikację, nie obawiając się, że te zmiany wpłyną na finalne kompilacje. Wszystkie dane d: są używane tylko przez projektant XAML i żadne ignorowane wartości przestrzeni nazw nie są kompilowane do aplikacji.

Notatka

Jeśli używasz zestawu narzędzi Xamarin.Forms, zobacz dane czasu projektowania zestawu narzędzi Xamarin.Forms

Podstawy danych czasu projektowania

Dane w czasie projektowania to pozorne dane ustawione w celu ułatwienia wizualizacji kontrolek w projektancie XAML. Aby rozpocząć, dodaj następujące wiersze kodu do nagłówka dokumentu XAML, jeśli nie są jeszcze obecne:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"

Po dodaniu przestrzeni nazwowych można umieścić d: przed dowolnym atrybutem lub kontrolką, aby pokazać ją tylko w edytorze XAML, ale nie w czasie wykonywania.

Możesz na przykład dodać tekst do bloku TextBlock, który zwykle ma powiązane dane.

<TextBlock Text="{Binding Name}" d:Text="Name!" />

Projektowanie danych w czasie projektowania z tekstem w elembcie TextBlock

W tym przykładzie bez d:Textprojektant XAML nie wyświetli niczego dla funkcji TextBlock. Zamiast tego pokazuje się "Name!", gdzie element TextBlock będzie zawierał rzeczywiste dane podczas działania.

Można użyć d: z atrybutami dla dowolnej kontrolki platformy UWP lub WPF .NET Core, takich jak kolory, rozmiary czcionek i odstępy. Możesz nawet dodać ją do samej kontrolki.

<d:Button Content="Design Time Button" />

Dane czasu projektowania za pomocą kontrolki Przycisk

W tym przykładzie przycisk jest wyświetlany tylko w czasie projektowania. Użyj tej metody, aby umieścić symbol zastępczy dla kontrolki niestandardowej lub wypróbować różne kontrolki. Wszystkie atrybuty i kontrolki d: zostaną zignorowane podczas wykonywania.

Podgląd obrazów w czasie projektowania

Można ustawić źródło podczas projektowania dla obrazów, które są związane ze stroną lub ładowane dynamicznie. Dodaj obraz, który chcesz pokazać w projektancie XAML do projektu. Następnie możesz wyświetlić ten obraz w projektancie XAML w czasie projektowania:

<Image Source={Binding ProfilePicture} d:Source="DesignTimePicture.jpg" />

Notatka

Obraz w tym przykładzie musi istnieć w rozwiązaniu.

Dane dotyczące czasu projektowania elementów ListView

ListViews to popularny sposób wyświetlania danych w aplikacji desktopowej. Trudno je jednak wizualizować bez żadnych danych. Możesz użyć tej funkcji, aby utworzyć inline'owe dane w czasie projektowania jako ItemSource lub Items. Projektant XAML wyświetla zawartość tej tablicy w ListView podczas projektowania.

Przykład platformy .NET Core WPF

Aby użyć typu system:String, upewnij się, że do nagłówka XAML dołączysz xmlns:system="clr-namespace:System;assembly=mscorlib.

<StackPanel>
    <ListView ItemsSource="{Binding Items}">
        <d:ListView.ItemsSource>
            <x:Array Type="{x:Type system:String}">
                <system:String>Item One</system:String>
                <system:String>Item Two</system:String>
                <system:String>Item Three</system:String>
            </x:Array>
        </d:ListView.ItemsSource>
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ItemName}" d:Text="{Binding .}" />
        </DataTemplate>
    </ListView.ItemTemplate>
   </ListView>
</StackPanel>

Dane w czasie projektowania za pomocą kontrolki ListView

W tym poprzednim przykładzie pokazano element ListView z trzema TextBlockami w Projektancie XAML.

Można również utworzyć tablicę obiektów danych. Na przykład publiczne właściwości obiektu danych City można utworzyć jako dane czasu projektowania.

namespace Cities.Models
{
    public class City
    {
        public string Name { get; set; }
        public string Country { get; set; }
    }
}

Aby użyć klasy w języku XAML, należy zaimportować przestrzeń nazw w węźle głównym.

xmlns:models="clr-namespace:Cities.Models"
<StackPanel>
    <ListView ItemsSource="{Binding Items}">
        <d:ListView.ItemsSource>
            <x:Array Type="{x:Type models:City}">
                <models:City Name="Seattle" Country="United States"/>
                <models:City Name="London" Country="United Kingdom"/>
                <models:City Name="Panama City" Country="Panama"/>
            </x:Array>
        </d:ListView.ItemsSource>
        <ListView.ItemTemplate>
            <DataTemplate>
                 <StackPanel Orientation="Horizontal" >
                    <TextBlock Text="{Binding Name}" Margin="0,0,5,0" />
                    <TextBlock Text="{Binding Country}" />
                 </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackPanel>

Rzeczywisty model w danych w czasie projektowania za pomocą kontrolki ListView

Zaletą jest możliwość powiązania kontrolek z statyczną wersją modelu w czasie projektowania.

Przykład platformy UWP

Funkcja x:Array nie jest obsługiwana w systemie UWP. W związku z tym możemy użyć <d:ListView.Items> zamiast tego. Aby użyć typu system:String, upewnij się, że do nagłówka XAML dołączysz http://schemas.microsoft.com/winfx/2009/xaml.

    <StackPanel>
        <ListView>
            <d:ListView.Items>
                <system:String>Item One</system:String>
                <system:String>Item Two</system:String>
                <system:String>Item Three</system:String>
            </d:ListView.Items>
        </ListView>
    </StackPanel>

Używanie danych podczas projektowania z niestandardowymi typami i właściwościami

Ta funkcja domyślnie działa tylko z kontrolkami i właściwościami platformy. W tej sekcji omówimy kroki niezbędne do umożliwienia używania własnych kontrolek niestandardowych jako kontrolek czasu projektowania, nowej funkcji dostępnej dla klientów przy użyciu programu Visual Studio 2019 w wersji 16.8 lub nowszej. Aby to umożliwić, należy spełnić trzy wymagania:

  • Niestandardowa przestrzeń nazw xmlns

    xmlns:myControls="http://MyCustomControls"
    
  • Wersja przestrzeni nazw używana podczas projektowania. Można to osiągnąć, dołączając /design na końcu.

    xmlns:myDesignTimeControls="http://MyCustomControls/design"
    
  • Dodawanie prefiksu czasu projektowania do elementu mc:Ignorable

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d myDesignTimeControls"
    

Po wykonaniu wszystkich tych kroków możesz użyć prefiksu myDesignTimeControls, aby utworzyć kontrolki czasu projektowania.

<myDesignTimeControls:MyButton>I am a design time Button</myDesignTimeControls:MyButton>

Tworzenie niestandardowej przestrzeni nazw xmlns

Aby utworzyć niestandardową przestrzeń nazw xmlns w WPF .NET Core, musisz zamapować niestandardową przestrzeń nazw XML do przestrzeni nazw CLR, w której znajdują się kontrolki. Można to zrobić, dodając atrybut XmlnsDefinition na poziomie zestawu w pliku AssemblyInfo.cs. Plik znajduje się w hierarchii głównej projektu.

[assembly: XmlnsDefinition("http://MyCustomControls", "MyViews.MyButtons")]

Rozwiązywanie problemów

Jeśli wystąpi problem, który nie znajduje się na liście w tej sekcji, poinformuj nas, korzystając z narzędzia Zgłoś problem.

Projektant XAML przestał działać

Spróbuj zamknąć i ponownie otworzyć plik XAML oraz wyczyścić i ponownie skompilować projekt.

Zobacz też