Szukaj…


Wprowadzenie

Większość przykładów dla programowania FF WPF wydaje się dotyczyć wzorca MVVM, a kilka z MVC, ale nie ma żadnego takiego, który pokazuje, jak prawidłowo rozpocząć pracę z „starym dobrym” kodem.

Kod stojący za wzorem jest bardzo łatwy w użyciu zarówno do nauczania, jak i do eksperymentowania. Jest wykorzystywany w licznych książkach wprowadzających i materiałach do nauki w Internecie. Dlatego.

Te przykłady pokażą, jak utworzyć kod za aplikacją z oknami, kontrolkami, obrazami i ikonami i nie tylko.

Utwórz nowy kod FF WPF za aplikacją.

Utwórz aplikację konsoli F #.

Zmień typ danych wyjściowych aplikacji na aplikację systemu Windows .

Dodaj pakiet FsXaml NuGet.

Dodaj te cztery pliki źródłowe, w kolejności podanej tutaj.

MainWindow.xaml

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="First Demo" Height="200" Width="300">
    <Canvas>
        <Button Name="btnTest" Content="Test" Canvas.Left="10" Canvas.Top="10" Height="28" Width="72"/>
    </Canvas>
</Window>

MainWindow.xaml.fs

namespace FirstDemo

type MainWindowXaml = FsXaml.XAML<"MainWindow.xaml">

type MainWindow() as this =
    inherit MainWindowXaml()

    let whenLoaded _ =
        ()

    let whenClosing _ =
        ()

    let whenClosed _ =
        ()

    let btnTestClick _ =
        this.Title <- "Yup, it works!"

    do
        this.Loaded.Add whenLoaded
        this.Closing.Add whenClosing
        this.Closed.Add whenClosed
        this.btnTest.Click.Add btnTestClick

App.xaml

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
    </Application.Resources>
</Application>

App.xaml.fs

namespace FirstDemo

open System

type App = FsXaml.XAML<"App.xaml">

module Main =

    [<STAThread; EntryPoint>]
    let main _ =
        let app = App()
        let mainWindow = new MainWindow()
        app.Run(mainWindow) // Returns application's exit code.

Usuń plik Program.fs z projektu.

Zmień działanie kompilacji na Zasób dla dwóch plików xaml.

Dodaj odwołanie do zestawu .NET UIAutomationTypes .

Skompiluj i uruchom.

Nie można używać projektanta do dodawania procedur obsługi zdarzeń, ale to wcale nie jest problem. Po prostu dodaj je ręcznie w kodzie z tyłu, tak jak w przypadku trzech programów obsługi w tym przykładzie, w tym funkcji obsługi przycisku testowego.

AKTUALIZACJA: Do FsXaml dodano alternatywny i prawdopodobnie bardziej elegancki sposób dodawania procedur obsługi zdarzeń. Możesz dodać moduł obsługi zdarzeń w XAML, tak samo jak w C #, ale musisz to zrobić ręcznie, a następnie zastąpić odpowiedni element, który pojawia się w twoim typie F #. Polecam to.

3: Dodaj ikonę do okna

Dobrze jest przechowywać wszystkie ikony i obrazy w jednym lub kilku folderach.

Kliknij projekt prawym przyciskiem myszy i użyj F # Power Tools / New Folder, aby utworzyć folder o nazwie Obrazy.

Na dysku umieść ikonę w nowym folderze Obrazy .

Po powrocie do Visual Studio kliknij prawym przyciskiem myszy Obrazy i użyj polecenia Dodaj / istniejący element , a następnie pokaż wszystkie pliki ( . ) **, aby zobaczyć plik ikony, abyś mógł go wybrać, a następnie dodaj go.

Wybierz plik ikony i ustaw opcję Buduj akcję na Zasób .

W MainWindow.xaml użyj takiego atrybutu Ikona. Linie otaczające są pokazane dla kontekstu.

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="First Demo" Height="200" Width="300"
    Icon="Images/MainWindow.ico">
<Canvas>

Przed uruchomieniem przebuduj, a nie tylko kompilację. Wynika to z faktu, że Visual Studio nie zawsze umieszcza plik ikony w pliku wykonywalnym, chyba że przebudujesz.

To okno, a nie aplikacja, ma teraz ikonę. W czasie wykonywania zobaczysz ikonę w lewym górnym rogu okna i zobaczysz ją na pasku zadań. Menedżer zadań i Eksplorator plików systemu Windows nie będą wyświetlać tej ikony, ponieważ wyświetlają ikonę aplikacji zamiast ikony okna.

4: Dodaj ikonę do aplikacji

Utwórz plik tekstowy o nazwie AppIcon.rc o następującej treści.

1 ICON "AppIcon.ico"

Aby to zadziałało, potrzebujesz pliku ikony o nazwie AppIcon.ico, ale oczywiście możesz dostosować nazwy do własnych upodobań.

Uruchom następujące polecenie.

"C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe" /v AppIcon.rc

Jeśli nie możesz znaleźć rc.exe w tej lokalizacji, wyszukaj go poniżej C: \ Program Files (x86) \ Windows Kits . Jeśli nadal nie możesz go znaleźć, pobierz Windows SDK od Microsoft.

Zostanie wygenerowany plik o nazwie AppIcon.res.

W Visual Studio otwórz właściwości projektu. Wybierz stronę aplikacji .

W polu tekstowym zatytułowanym Plik zasobów wpisz AppIcon.res (lub Images \ AppIcon.res, jeśli go tam umieścisz), a następnie zamknij właściwości projektu, aby zapisać.

Pojawi się komunikat o błędzie z informacją: „Wprowadzony plik zasobów nie istnieje. Zignoruj to. Komunikat o błędzie nie pojawi się ponownie.

Odbudować. Plik wykonywalny będzie wtedy miał ikonę aplikacji, która pojawia się w Eksploratorze plików. Podczas działania ta ikona pojawi się również w Menedżerze zadań.

2: Dodaj kontrolkę

Dodaj te dwa pliki w tej kolejności nad plikami w oknie głównym.

MyControl.xaml

<UserControl
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" Height="50" Width="150">
    <Canvas Background="LightGreen">
        <Button Name="btnMyTest" Content="My Test" Canvas.Left="10" Canvas.Top="10" Height="28" Width="106"/>
    </Canvas>
</UserControl>

MyControl.xaml.fs

namespace FirstDemo

type MyControlXaml = FsXaml.XAML<"MyControl.xaml">

type MyControl() =
    inherit MyControlXaml()

Akcja kompilacji dla MyControl.xaml musi być ustawiona na Zasób .

Oczywiście będziesz musiał później dodać „as this” w deklaracji MyControl, tak jak zrobiono to w oknie głównym.

W pliku MainWindow.xaml.fs , w klasie dla MainWindow, dodaj tę linię

let myControl = MyControl()

i dodaj te dwa wiersze w sekcji do -głównej klasy okna głównego.

    this.mainCanvas.Children.Add myControl |> ignore
    myControl.btnMyTest.Content <- "We're in business!"

Nie może być więcej niż jeden zrobić -section w klasie, i jest prawdopodobne, aby to potrzebne podczas pisania dużo kodu z opóźnieniem kodu.

Kontrolce nadano jasnozielony kolor tła, dzięki czemu można łatwo zobaczyć, gdzie jest.

Należy pamiętać, że formant zablokuje widok przycisku głównego okna. Nauczanie WPF w ogólności wykracza poza zakres tych przykładów, więc nie naprawimy tego tutaj.

Jak dodać kontrolki z bibliotek stron trzecich

Jeśli dodasz formanty z bibliotek stron trzecich w projekcie WPF w C #, plik XAML zwykle będzie miał linie takie jak ten.

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"

Być może nie zadziała to z FsXaml.

Projektant i kompilator akceptują tę linię, ale prawdopodobnie w środowisku wykonawczym wystąpi wyjątek, w którym narzeka się, że podczas odczytu XAML nie znaleziono typu strony trzeciej.

Zamiast tego spróbuj czegoś takiego.

xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"

To jest przykład kontroli, która zależy od powyższego.

<xctk:IntegerUpDown Name="tbInput" Increment="1" Maximum="10" Minimum="0" Canvas.Left="13" Canvas.Top="27" Width="270"/>

Biblioteką użytą w tym przykładzie jest Extended Wpf Toolkit, dostępny bezpłatnie przez NuGet lub jako instalator. Jeśli pobierzesz biblioteki przez NuGet, formanty nie będą dostępne w Przyborniku, ale nadal będą wyświetlane w projektancie, jeśli dodasz je ręcznie w XAML, a właściwości są dostępne w panelu Właściwości.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow