Bilder in Xamarin.Mac

In diesem Artikel werden Bilder und Symbole in einer Xamarin.Mac-Anwendung behandelt. Es beschreibt das Erstellen und Verwalten der Bilder, die zum Erstellen des Symbols Ihrer Anwendung erforderlich sind, und die Verwendung von Bildern sowohl im C#-Code als auch im Xcode-Schnittstellen-Generator.

Überblick

Wenn Sie mit C# und .NET in einer Xamarin.Mac-Anwendung arbeiten, haben Sie Zugriff auf dieselben Bild- und Symboltools, die ein Entwickler in Objective-C und Xcode ausführt.

Es gibt verschiedene Möglichkeiten, wie Bildressourcen in einer macOS-Anwendung (früher als Mac OS X bezeichnet) verwendet werden. Von der einfachen Anzeige eines Bilds als Teil der Benutzeroberfläche Ihrer Anwendung zum Zuweisen eines Ui-Steuerelements wie einer Toolleiste oder eines Quelllistenelements zum Bereitstellen von Symbolen erleichtert Xamarin.Mac das Hinzufügen großartiger Grafiken zu Ihren macOS-Anwendungen auf folgende Weise:

  • UI-Elemente – Bilder können als Hintergründe oder als Teil Ihrer Anwendung in einer BildansichtNSImageView () angezeigt werden.
  • Schaltfläche – Bilder können in Schaltflächen (NSButton) angezeigt werden.
  • Bildzelle – Als Teil eines tabellenbasierten Steuerelements (NSTableView oder NSOutlineView), bilder können in einer Bildzelle (NSImageCell) verwendet werden.
  • Symbolleistenelement – Bilder können einer Symbolleiste () als Bildsymbolleistenelement (NSToolbarNSToolbarItem) hinzugefügt werden.
  • Quelllistensymbol – Als Teil einer Quellliste (speziell formatiert NSOutlineView).
  • App-Symbol – Eine Reihe von Bildern kann in einer .icns Gruppe gruppiert und als Symbol Ihrer Anwendung verwendet werden. Weitere Informationen finden Sie in unserer Anwendungssymboldokumentation .

Darüber hinaus stellt macOS eine Reihe vordefinierter Bilder bereit, die in der gesamten Anwendung verwendet werden können.

An example run of the app

In diesem Artikel werden die Grundlagen der Arbeit mit Bildern und Symbolen in einer Xamarin.Mac-Anwendung behandelt. Es wird dringend empfohlen, zuerst den Artikel "Hello, Mac " zu durchlaufen, insbesondere die Abschnitte "Einführung in Xcode" und "Interface Builder" und"Outlets" und "Actions ", da es sich um wichtige Konzepte und Techniken handelt, die wir in diesem Artikel verwenden werden.

Hinzufügen von Bildern zu einem Xamarin.Mac-Projekt

Wenn Sie ein Bild für die Verwendung in einer Xamarin.Mac-Anwendung hinzufügen, gibt es mehrere Orte und Möglichkeiten, wie der Entwickler Bilddatei in die Quelle des Projekts einschließen kann:

  • Hauptprojektstruktur [veraltet] – Bilder können direkt zur Projektstruktur hinzugefügt werden. Beim Aufrufen von Bildern, die in der Hauptprojektstruktur aus Code gespeichert sind, wird kein Ordnerspeicherort angegeben. Beispiel: NSImage image = NSImage.ImageNamed("tags.png");.
  • Ressourcenordner [veraltet] – Der spezielle Ressourcenordner gilt für jede Datei, die Teil des Anwendungspakets wird, z. B. Symbol, Startbildschirm oder allgemeine Bilder (oder ein anderes Bild oder eine andere Datei, die der Entwickler hinzufügen möchte). Wenn Bilder aufgerufen werden, die im Ordner "Ressourcen " aus Code gespeichert sind, genau wie Bilder, die in der Hauptprojektstruktur gespeichert sind, wird kein Ordnerspeicherort angegeben. Beispiel: NSImage.ImageNamed("tags.png").
  • Benutzerdefinierter Ordner oder Unterordner [veraltet] – Der Entwickler kann dem Quellbaum der Projekte einen benutzerdefinierten Ordner hinzufügen und die Bilder dort speichern. Der Speicherort, an dem die Datei hinzugefügt wird, kann in einem Unterordner geschachtelt werden, um das Projekt weiter zu organisieren. Wenn der Entwickler beispielsweise dem Projekt und einem Unterordner Hearts dieses Ordners einen Card Ordner hinzugefügt hat, wird ein Bild Jack.png im Hearts Ordner gespeichert, NSImage.ImageNamed("Card/Hearts/Jack.png") das Bild zur Laufzeit geladen.
  • Asset Catalog Image Sets [preferred] – Hinzugefügt in OS X El Capitan, Asset Catalogs Image Sets enthalten alle Versionen oder Darstellungen eines Bilds, die erforderlich sind, um verschiedene Geräte und Skalierungsfaktoren für Ihre Anwendung zu unterstützen. Anstatt sich auf den Dateinamen der Bildressourcen (@1x, @2x) zu verlassen.

Hinzufügen von Bildern zu einem Objektkatalogbildsatz

Wie oben erwähnt, enthält ein Objektkatalog image Sets alle Versionen oder Darstellungen eines Bilds, die erforderlich sind, um verschiedene Geräte und Skalierungsfaktoren für Ihre Anwendung zu unterstützen. Anstatt auf den Dateinamen der Bildressourcen zu vertrauen (siehe oben die Auflösung unabhängige Bilder und Bildklatur), verwenden Bildsätze den Objekt-Editor, um anzugeben, welches Bild zu welchem Gerät und/oder welcher Auflösung gehört.

  1. Doppelklicken Sie im Lösungspad auf die Datei "Assets.xcassets" , um sie zum Bearbeiten zu öffnen:

    Selecting the Assets.xcassets

  2. Klicken Sie mit der rechten Maustaste auf die Ressourcenliste , und wählen Sie "Neues Bildsatz" aus:

    Adding a new image set

  3. Wählen Sie den neuen Bildsatz aus, und der Editor wird angezeigt:

    Selecting the new image set

  4. Von hier aus können wir Bilder für jede der verschiedenen Geräte und Auflösungen ziehen.

  5. Doppelklicken Sie auf den Namen des neuen Bildsatzes in der Ressourcenliste , um ihn zu bearbeiten:

    Editing the image set name

Eine spezielle Vector-Klasse , die zu Image Sets hinzugefügt wurde, die es uns ermöglicht, ein PDF-formatiertes Vektorbild in das Casset einzuschließen, anstatt einzelne Bitmapdateien in den verschiedenen Auflösungen einzuschließen. Mit dieser Methode geben Sie eine einzelne Vektordatei für die @1x Auflösung (formatiert als Vektor-PDF-Datei) und die @2x und @3x Versionen der Datei zur Kompilierungszeit generiert und in das Paket der Anwendung eingeschlossen werden.

The image set editor interface

Wenn Sie z. B. eine MonkeyIcon.pdf Datei als Vektor eines Objektkatalogs mit einer Auflösung von 150px x 150px einschließen, würden die folgenden Bitmapressourcen beim Kompilieren in das endgültige App-Bundle aufgenommen:

  1. MonkeyIcon@1x.png - 150px x 150px Auflösung.
  2. MonkeyIcon@2x.png - 300px x 300px Auflösung.
  3. MonkeyIcon@3x.png - 450px x 450px Auflösung.

Im Folgenden sollten Sie berücksichtigen, wenn Sie PDF-Vektorbilder in Objektkatalogen verwenden:

  • Dies ist keine vollständige Vektorunterstützung, da die PDF-Datei zur Kompilierungszeit auf eine Bitmap gerastert wird und die in der endgültigen Anwendung gelieferten Bitmaps.
  • Sie können die Größe des Bilds nicht anpassen, nachdem sie im Objektkatalog festgelegt wurde. Wenn Sie versuchen, die Größe des Bilds (entweder im Code oder mithilfe von Autolayout- und Größenklassen) zu ändern, wird das Bild wie jede andere Bitmap verzerrt.

Wenn Sie einen Bildsatz im Schnittstellen-Generator von Xcode verwenden, können Sie einfach den Namen des Satzes aus der Dropdownliste im Attributinspektor auswählen:

Selecting an image set in Xcode's Interface Builder

Hinzufügen neuer Ressourcensammlungen

Wenn Sie mit Bildern in Ressourcenkatalogen arbeiten, kann es vorkommen, dass Sie eine neue Auflistung erstellen möchten, anstatt alle Bilder zur Assets.xcassets-Auflistung hinzuzufügen. Beispielsweise beim Entwerfen von On-Demand-Ressourcen.

So fügen Sie Ihrem Projekt einen neuen Ressourcenkatalog hinzu:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappenblock, und wählen Sie "AddNew Datei">aus...

  2. Wählen Sie "MacAsset-Katalog>" aus, geben Sie einen Namen für die Sammlung ein, und klicken Sie auf die Schaltfläche "Neu":

    Adding a new Asset Catalog

Von hier aus können Sie mit der Auflistung auf die gleiche Weise arbeiten wie die standardmäßige Assets.xcassets-Auflistung , die automatisch im Projekt enthalten ist.

Hinzufügen von Bildern zu Ressourcen

Wichtig

Diese Methode zum Arbeiten mit Bildern in einer macOS-App wurde von Apple veraltet. Sie sollten stattdessen Objektkatalogbildsätze verwenden, um die Bilder Ihrer App zu verwalten.

Bevor Sie eine Bilddatei in Ihrer Xamarin.Mac-Anwendung (entweder im C#-Code oder im Schnittstellen-Generator) verwenden können, muss sie im Ressourcenordner des Projekts als Bundleressource enthalten sein. Gehen Sie wie folgt vor, um einer Projekt eine Datei hinzuzufügen:

  1. Klicken Sie mit der rechten Maustaste auf den Ordner "Ressourcen" in Ihrem Projekt im Lösungspad, und wählen Sie "AddAdd-Dateien>" aus...:

    Adding a file

  2. Wählen Sie im Dialogfeld "Dateien hinzufügen " die Bilderdateien aus, die zum Projekt hinzugefügt werden sollen, wählen Sie BundleResource für die Buildaktion außer Kraft, und klicken Sie auf die Schaltfläche " Öffnen ":

    Selecting the files to add

  3. Wenn sich die Dateien noch nicht im Ordner "Ressourcen " befinden, werden Sie gefragt, ob Sie die Dateien kopieren, verschieben oder verknüpfen möchten. Wählen Sie aus, welche ihre Anforderungen erfüllen, in der Regel kopieren:

    Selecting the add action

  4. Die neuen Dateien werden in das Projekt aufgenommen und zur Verwendung gelesen:

    The new image files added to the Solution Pad

  5. Wiederholen Sie den Vorgang für alle erforderlichen Bilddateien.

Sie können eine beliebige PNG-, JPG- oder PDF-Datei als Quellbild in Ihrer Xamarin.Mac-Anwendung verwenden. Im nächsten Abschnitt sehen wir uns das Hinzufügen von High-Resolution-Versionen unserer Bilder und Symbole zur Unterstützung von Retina-basierten Macs an.

Wichtig

Wenn Sie "Images" zum Ordner "Ressourcen " hinzufügen, können Sie die Buildaktion außer Kraft setzen, die auf "Standard" festgelegt ist. Die Standard-Buildaktion für diesen Ordner ist BundleResource.

Bereitstellen von hochauflösenden Versionen aller App-Grafikressourcen

Alle Grafikressourcen, die Sie einer Xamarin.Mac-Anwendung (Symbole, benutzerdefinierte Steuerelemente, benutzerdefinierte Cursor, benutzerdefinierte Grafiken usw.) hinzufügen, müssen zusätzlich zu ihren Standardauflösungsversionen über hochauflösende Versionen verfügen. Dies ist erforderlich, damit Ihre Anwendung beim Ausführen auf einem auf einem Netzhautanzeige ausgestatteten Mac-Computer am besten aussieht.

Übernehmen der @2x Benennungskonvention

Wichtig

Diese Methode zum Arbeiten mit Bildern in einer macOS-App wurde von Apple veraltet. Sie sollten stattdessen Objektkatalogbildsätze verwenden, um die Bilder Ihrer App zu verwalten.

Wenn Sie die standard- und hochauflösenden Versionen eines Bilds erstellen, folgen Sie dieser Benennungskonvention für das Bildpaar, wenn sie in Ihr Xamarin.Mac-Projekt eingeschlossen werden:

  • Standardauflösung - ImageName.filename-extension (Beispiel: tags.png)
  • Hohe Auflösung - ImageName@2x.filename-extension (Beispiel: tags@2x.png)

Wenn sie einem Projekt hinzugefügt wurden, werden sie wie folgt angezeigt:

The image files in the Solution Pad

Wenn ein Bild einem UI-Element im Schnittstellen-Generator zugewiesen wird, wählen Sie einfach die Datei im ImageNameaus.filename-extension format (Beispiel: tags.png). Dasselbe für die Verwendung eines Bilds im C#-Code, wählen Sie die Datei im ImageNameaus.filename-extension format.

Wenn Sie Xamarin.Mac-Anwendung auf einem Mac ausführen, wird der ImageNameangezeigt.Dateierweiterungsformatbild wird auf Standardauflösungsanzeigen verwendet, dasImageName@2x.filename Erweiterungsbild wird automatisch auf Retina Display-Basis macs ausgewählt.

Verwenden von Bildern im Schnittstellen-Generator

Jede Bildressource, die Sie dem Ordner "Ressourcen " in Ihrem Xamarin.Mac-Projekt hinzugefügt haben und die Buildaktion auf BundleResource festgelegt haben, wird automatisch im Interface Builder angezeigt und kann als Teil eines UI-Elements ausgewählt werden (wenn es Bilder behandelt).

Gehen Sie wie folgt vor, um ein Bild im Schnittstellen-Generator zu verwenden:

  1. Hinzufügen eines Bilds zum Ordner "Ressourcen " mit einer Buildaktion von BundleResource:

    An image resource in the Solution Pad

  2. Doppelklicken Sie auf die Datei "Main.storyboard ", um sie zum Bearbeiten im Schnittstellen-Generator zu öffnen:

    Editing the main storyboard

  3. Ziehen Sie ein UI-Element, das Bilder auf der Entwurfsoberfläche verwendet (z. B. ein Bildsymbolleistenelement):

    Editing a toolbar item

  4. Wählen Sie das Bild aus, das Sie dem Ordner "Ressourcen " im Dropdown " Bildname " hinzugefügt haben:

    Selecting an image for a toolbar item

  5. Das ausgewählte Bild wird auf der Entwurfsoberfläche angezeigt:

    The image being displayed in the Toolbar editor

  6. Speichern Sie Ihre Änderungen, und kehren Sie zu Visual Studio für Mac zurück, um mit Xcode zu synchronisieren.

Die oben aufgeführten Schritte funktionieren für jedes UI-Element, mit dem ihre Bildeigenschaft im Attributinspektor festgelegt werden kann. Wenn Sie eine @2x Version Ihrer Bilddatei enthalten haben, wird sie automatisch auf Retina Display basierenden Macs verwendet.

Wichtig

Wenn das Bild in der Dropdownliste "Bildname" nicht verfügbar ist, schließen Sie Ihr .storyboard-Projekt in Xcode, und öffnen Sie sie von Visual Studio für Mac erneut. Wenn das Bild weiterhin nicht verfügbar ist, stellen Sie sicher, dass die BuildaktionBundleResource vorhanden ist und das Bild dem Ordner "Ressourcen " hinzugefügt wurde.

Verwenden von Bildern im C#-Code

Beim Laden eines Bilds in den Arbeitsspeicher mithilfe von C#-Code in Ihrer Xamarin.Mac-Anwendung wird das Bild in einem NSImage Objekt gespeichert. Wenn die Bilddatei im Xamarin.Mac-Anwendungspaket (in Ressourcen enthalten) enthalten ist, verwenden Sie den folgenden Code, um das Bild zu laden:

NSImage image = NSImage.ImageNamed("tags.png");

Der obige Code verwendet die statische ImageNamed("...") Methode der NSImage Klasse, um das angegebene Bild im Arbeitsspeicher aus dem Ordner "Ressourcen " zu laden, wenn das Bild nicht gefunden werden kann, null wird zurückgegeben. Wenn Sie eine @2x Version Ihrer Bilddatei enthalten haben, wird sie automatisch auf Retina Display basierenden Macs verwendet.

Um Bilder außerhalb des Pakets der Anwendung (aus dem Mac-Dateisystem) zu laden, verwenden Sie den folgenden Code:

NSImage image = new NSImage("/Users/KMullins/Documents/photo.jpg")

Arbeiten mit Vorlagenbildern

Basierend auf dem Design Ihrer macOS-App kann es vorkommen, dass Sie ein Symbol oder Bild innerhalb der Benutzeroberfläche anpassen müssen, um einem Änderungsschema der Farbschemas zu entsprechen (z. B. basierend auf Benutzereinstellungen).

Um diesen Effekt zu erreichen, wechseln Sie zum Rendermodus Ihres Bildobjekts zu Vorlagenbild:

Setting a template image

Weisen Sie vom Xcode-Schnittstellen-Generator das Image-Objekt einem UI-Steuerelement zu:

Selecting an image in Xcode's Interface Builder

Oder optional die Bildquelle im Code festlegen:

MyIcon.Image = NSImage.ImageNamed ("MessageIcon");

Fügen Sie der Ansichtscontroller die folgende öffentliche Funktion hinzu:

public NSImage ImageTintedWithColor(NSImage sourceImage, NSColor tintColor)
    => NSImage.ImageWithSize(sourceImage.Size, false, rect => {
        // Draw the original source image
        sourceImage.DrawInRect(rect, CGRect.Empty, NSCompositingOperation.SourceOver, 1f);

        // Apply tint
        tintColor.Set();
        NSGraphics.RectFill(rect, NSCompositingOperation.SourceAtop);

        return true;
    });

Wichtig

Besonders bei der Einführung des dunklen Modus in macOS Mojave ist es wichtig, die LockFocus API beim Erneuten von benutzerdefinierten NSImage Objekten zu vermeiden. Solche Bilder werden statisch und werden nicht automatisch aktualisiert, um darstellungs- oder Anzeigedichteänderungen zu berücksichtigen.

Durch die Verwendung des oben genannten Handlermechanismus erfolgt das erneute Rendern für dynamische Bedingungen automatisch, wenn dies NSImage z. B. in einer NSImageView.

Rufen Sie diese Funktion schließlich auf, um ein Vorlagenbild zu farbisieren:

MyIcon.Image = ImageTintedWithColor (MyIcon.Image, NSColor.Red);

Verwenden von Bildern mit Tabellenansichten

Um ein Bild als Teil der Zelle in eine NSTableViewZelle einzuschließen, müssen Sie ändern, wie die Daten von der Methode "TabellenansichtGetViewForItemNSTableViewDelegate's" zurückgegeben werden, um eine NSTableCellView anstelle des typischen NSTextFieldTyps zu verwenden. Beispiel:

public override NSView GetViewForItem (NSTableView tableView, NSTableColumn tableColumn, nint row)
{

    // This pattern allows you reuse existing views when they are no-longer in use.
    // If the returned view is null, you instance up a new view
    // If a non-null view is returned, you modify it enough to reflect the new data
    NSTableCellView view = (NSTableCellView)tableView.MakeView (tableColumn.Title, this);
    if (view == null) {
        view = new NSTableCellView ();
        if (tableColumn.Title == "Product") {
            view.ImageView = new NSImageView (new CGRect (0, 0, 16, 16));
            view.AddSubview (view.ImageView);
            view.TextField = new NSTextField (new CGRect (20, 0, 400, 16));
        } else {
            view.TextField = new NSTextField (new CGRect (0, 0, 400, 16));
        }
        view.TextField.AutoresizingMask = NSViewResizingMask.WidthSizable;
        view.AddSubview (view.TextField);
        view.Identifier = tableColumn.Title;
        view.TextField.BackgroundColor = NSColor.Clear;
        view.TextField.Bordered = false;
        view.TextField.Selectable = false;
        view.TextField.Editable = true;

        view.TextField.EditingEnded += (sender, e) => {

            // Take action based on type
            switch(view.Identifier) {
            case "Product":
                DataSource.Products [(int)view.TextField.Tag].Title = view.TextField.StringValue;
                break;
            case "Details":
                DataSource.Products [(int)view.TextField.Tag].Description = view.TextField.StringValue;
                break; 
            }
        };
    }

    // Tag view
    view.TextField.Tag = row;

    // Setup view based on the column selected
    switch (tableColumn.Title) {
    case "Product":
        view.ImageView.Image = NSImage.ImageNamed ("tags.png");
        view.TextField.StringValue = DataSource.Products [(int)row].Title;
        break;
    case "Details":
        view.TextField.StringValue = DataSource.Products [(int)row].Description;
        break;
    }

    return view;
}

Hier gibt es einige Interessenlinien. Zunächst erstellen wir für Spalten, die ein Bild einschließen möchten, eine Neue NSImageView der erforderlichen Größe und Position, wir erstellen auch eine neue NSTextField und platzieren ihre Standardposition basierend darauf, ob wir ein Bild verwenden:

if (tableColumn.Title == "Product") {
    view.ImageView = new NSImageView (new CGRect (0, 0, 16, 16));
    view.AddSubview (view.ImageView);
    view.TextField = new NSTextField (new CGRect (20, 0, 400, 16));
} else {
    view.TextField = new NSTextField (new CGRect (0, 0, 400, 16));
}

Zweitens müssen wir die neue Bildansicht und das Textfeld in das übergeordnete NSTableCellViewFeld einschließen:

view.AddSubview (view.ImageView);
...

view.AddSubview (view.TextField);
...

Schließlich müssen wir dem Textfeld mitteilen, dass es mit der Zelle "Tabellenansicht" verkleinern und wachsen kann:

view.TextField.AutoresizingMask = NSViewResizingMask.WidthSizable;

Beispielausgabe:

An example of displaying an image in an app

Weitere Informationen zur Arbeit mit Tabellenansichten finden Sie in der Dokumentation zu Tabellenansichten .

Verwenden von Bildern mit Gliederungsansichten

Um ein Bild als Teil der Zelle in eine NSOutlineViewZelle einzuschließen, müssen Sie ändern, wie die Daten von der Gliederungsansicht-Methode NSTableViewDelegate'sGetView zurückgegeben werden, um anstelle NSTableCellView der typischen NSTextField. Beispiel:

public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item) {
    // Cast item
    var product = item as Product;

    // This pattern allows you reuse existing views when they are no-longer in use.
    // If the returned view is null, you instance up a new view
    // If a non-null view is returned, you modify it enough to reflect the new data
    NSTableCellView view = (NSTableCellView)outlineView.MakeView (tableColumn.Title, this);
    if (view == null) {
        view = new NSTableCellView ();
        if (tableColumn.Title == "Product") {
            view.ImageView = new NSImageView (new CGRect (0, 0, 16, 16));
            view.AddSubview (view.ImageView);
            view.TextField = new NSTextField (new CGRect (20, 0, 400, 16));
        } else {
            view.TextField = new NSTextField (new CGRect (0, 0, 400, 16));
        }
        view.TextField.AutoresizingMask = NSViewResizingMask.WidthSizable;
        view.AddSubview (view.TextField);
        view.Identifier = tableColumn.Title;
        view.TextField.BackgroundColor = NSColor.Clear;
        view.TextField.Bordered = false;
        view.TextField.Selectable = false;
        view.TextField.Editable = !product.IsProductGroup;
    }

    // Tag view
    view.TextField.Tag = outlineView.RowForItem (item);

    // Allow for edit
    view.TextField.EditingEnded += (sender, e) => {

        // Grab product
        var prod = outlineView.ItemAtRow(view.Tag) as Product;

        // Take action based on type
        switch(view.Identifier) {
        case "Product":
            prod.Title = view.TextField.StringValue;
            break;
        case "Details":
            prod.Description = view.TextField.StringValue;
            break; 
        }
    };

    // Setup view based on the column selected
    switch (tableColumn.Title) {
    case "Product":
        view.ImageView.Image = NSImage.ImageNamed (product.IsProductGroup ? "tags.png" : "tag.png");
        view.TextField.StringValue = product.Title;
        break;
    case "Details":
        view.TextField.StringValue = product.Description;
        break;
    }

    return view;
}

Hier gibt es einige Interessenlinien. Zunächst erstellen wir für Spalten, die ein Bild einschließen möchten, eine Neue NSImageView der erforderlichen Größe und Position, wir erstellen auch eine neue NSTextField und platzieren ihre Standardposition basierend darauf, ob wir ein Bild verwenden:

if (tableColumn.Title == "Product") {
    view.ImageView = new NSImageView (new CGRect (0, 0, 16, 16));
    view.AddSubview (view.ImageView);
    view.TextField = new NSTextField (new CGRect (20, 0, 400, 16));
} else {
    view.TextField = new NSTextField (new CGRect (0, 0, 400, 16));
}

Zweitens müssen wir die neue Bildansicht und das Textfeld in das übergeordnete NSTableCellViewFeld einschließen:

view.AddSubview (view.ImageView);
...

view.AddSubview (view.TextField);
...

Schließlich müssen wir dem Textfeld mitteilen, dass es mit der Zelle "Tabellenansicht" verkleinern und wachsen kann:

view.TextField.AutoresizingMask = NSViewResizingMask.WidthSizable;

Beispielausgabe:

An example of an image being displayed in an Outline View

Weitere Informationen zur Arbeit mit Gliederungsansichten finden Sie in der Dokumentation zu Gliederungsansichten .

Zusammenfassung

Dieser Artikel hat einen detaillierten Blick auf die Arbeit mit Bildern und Symbolen in einer Xamarin.Mac-Anwendung gemacht. Wir haben die verschiedenen Typen und Verwendungen von Bildern gesehen, wie Bilder und Symbole im Benutzeroberfläche-Generator von Xcode verwendet werden und wie Sie mit Bildern und Symbolen im C#-Code arbeiten.