← All courses
UI · Free course

Icons and Images in Wisej.NET

Every Wisej.NET application is covered in pictures: command icons, status glyphs, logos, product photos. Getting them right is not an art problem, it is a mechanism problem — and Wisej.NET deliberately gives you more than one mechanism. This beginner course teaches you to tell them apart and pick the right one every time, built around IconDesk, a small icon-and-image workbench that gains one mechanism per module. Seven modules start with the image model itself — a server-side System.Drawing.Image versus an ImageSource string the browser resolves, the shared IImage contract and the ImageList — then work through PictureBox formats, size modes and asynchronous loading, theme images, URLs, the Visual Studio Image Selector and SVG recolouring, the official Wisej-4 icon packs on NuGet, embedded resources and resource.wx, and building a reusable icon pack of your own. The course closes with icon fonts, HTML content in Wisej.NET controls, and the production icon policy that ties accessibility, licensing, caching and consistency together.

Image, ImageSource, ImageList, theme images, icon packs, resource.wx and icon fonts — and how to choose between them.

Start this free course

Also available in: DeutschFrançaisItalianoEspañol

Curriculum

Module 1: The Wisej.NET Image Model: Image, ImageSource and ImageList

Module 1 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the image model walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    The two image pipelines: an Image property holding a System.Drawing.Image that the server sends to the browser as PNG, versus an ImageSource or IconSource string the client resolves as a URL, a theme name, a resource.wx path or an icon-pack item, plus the shared IImage contract and the ImageList that lets many controls share one keyed set of images. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonImage object or image string: pick the right one · 14 min

    Image object or image string: pick the right one — a guided Module 1 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Icons and Images in Wisej.NET, Module 1. Wisej.NET offers several ways to put a picture on a control, so the first decision in this course is always which mechanism owns the image.

    The Image property holds a System.Drawing.Image that the server keeps in memory and sends to the browser as PNG. ImageSource holds only a string, so nothing is decoded on the server at all. Both fill the same visual slot on the control, which is exactly why the choice has to be deliberate.

    That string can be a relative URL, an absolute URL, a named theme image or a resource.wx path, and the client resolves it. Image-capable controls share one contract through IImage, so a button, a label and a grid cell all expose the same family of image properties.

    In IconDesk, the Open button takes an image object the server reads from a file. The Save button takes a theme image name on ImageSource. Print and Delete share a single ImageList and select their artwork by key, so the list decides what those two buttons draw.

    An ImageList is indirection rather than storage. A key carries meaning that survives reordering, while an index is only a position and quietly points at different artwork once the collection changes. Replace the image stored under a key and every control using that key follows, with no other code touched.

    The diagnostics label asks each button, through IImage, which image property is actually populated. That question catches a common defect: an image source assigned after an image key takes the slot, the key stays set, and the control draws the string instead. Reading the control beats guessing.

    Running the page, four icons arrive by four different routes and all look equally correct. Only the Open button made the server decode a picture; the other three were resolved by the browser. The label names the mechanism behind each one, so the difference is visible rather than assumed.

    Replacing the artwork behind the delete key updates that button on its own, because the control refers to the key and not to the picture. Assigning an image source to the same button afterwards changes what it draws while the key remains set and ignored.

    Lab one: build the IconDesk command panel with all three mechanisms, add the diagnostics label that reads each button through IImage, and record what the key swap and the double assignment actually did.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 1 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — Four Buttons, Four Image Mechanisms · 45 min

    Objective: Create the IconDesk project and give it a command panel with Open, Save, Print and Delete buttons, each carrying its icon through a different mechanism. Load btnOpen from a server-side System.Drawing.Image, assign a named theme image to btnSave.ImageSource, and point btnPrint and btnDelete at one shared ImageList through ImageKey. Add a diagnostics label that inspects each button through IImage and reports which mechanism is actually in play, then change the image stored under a key in the ImageList and confirm that every control using that key follows the change. Deliverables: IconDesk command panel with Open, Save, Print and Delete buttons; btnOpen carrying a System.Drawing.Image loaded on the server and btnSave a named theme image on ImageSource; btnPrint and btnDelete sharing one ImageList through ImageKey rather than ImageIndex; Diagnostics label that reads each button through IImage and names the mechanism behind its icon; Lab note recording what happened when one ImageList key was replaced and when two image properties were set on the same button.

Module 2: Bitmaps, SVGs and PictureBox: Formats, Sizing and Loading

Module 2 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the PictureBox formats and size modes walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    Two format lists because there are two pipelines: bitmap, metafile, icon, JPEG, GIF and PNG through System.Drawing and PictureBox.Image, against the jpg, jpeg, png, gif, svg and bmp that resource.wx and theme images accept as strings, together with the PictureBox size modes and the synchronous Load and asynchronous LoadAsync entry points. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonOne picture, six size modes, two pipelines · 14 min

    One picture, six size modes, two pipelines — a guided Module 2 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Module 2. The ImageLab page in IconDesk puts an image object and an image-source string side by side on PictureBox controls, so the difference between the two pipelines becomes something you can see.

    Asking which formats Wisej.NET supports has no single answer, and treating it as one causes real defects. A logo stretched out of proportion, a page that stalls while a remote photograph downloads, and an icon file that refuses to load all come from collapsing two format lists into one.

    Keep the lists apart. Bitmap, metafile, icon, JPEG, GIF and PNG travel through System.Drawing and the Image property. The resource handler and theme images accept JPEG, PNG, GIF, SVG and bitmap as strings. SVG belongs to the string pipeline; it is not a System.Drawing format.

    Six size modes describe what happens when the picture and the box disagree. Normal clips, AutoSize resizes the box to the picture, CenterImage centres it, StretchImage distorts it, Zoom fits the whole image inside, and Cover fills the box and crops the overflow.

    Four controls share one source string and differ only by size mode, which isolates the sizing decision from the loading decision. The legacy icon file moves off the image-source string and onto the Image property, because icon and metafile belong to the System.Drawing pipeline.

    LoadAsync fetches the partner photograph without holding the page while it arrives. One vector icon, addressed as a resource string, feeds four different sizes from the same asset. A report handler then prints, for every PictureBox, whether the picture came from Image or from ImageSource.

    Running it, the same asset is clipped by Normal, fitted by Zoom, cropped by Cover and flattened by StretchImage. The remote photograph is still on its way, and the page stays usable while it downloads, which is the whole point of loading it asynchronously.

    The vector row stays crisp at sixteen, twenty-four, thirty-two and forty-eight pixels. The small bitmap is already soft at thirty-two, because the browser is enlarging pixels that were never there. The report then names the pipeline behind each control, so nobody has to guess.

    Lab two: build ImageLab with four size modes on one raster asset, a remote photograph through LoadAsync, one vector icon at four sizes, the report handler, and the format note.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 2 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — Size Modes, LoadAsync and a Crisp SVG · 45 min

    Objective: Build an ImageLab page in IconDesk that makes the two pipelines visible side by side. Show one raster asset four times with SizeMode set to Normal, Zoom, Cover and StretchImage so the cropping and distortion differences are obvious, add a PictureBox that pulls a remote JPEG with LoadAsync and keeps the page responsive while it arrives, and place one SVG assigned through ImageSource at 16, 24, 32 and 48 pixels to prove it stays sharp. Finish with a handler that reports, for every PictureBox on the page, whether its picture came from Image or from ImageSource. Deliverables: ImageLab page showing one raster asset in Normal, Zoom, Cover and StretchImage size modes; PictureBox that fetches a remote JPEG with LoadAsync without blocking the page; One SVG assigned through ImageSource and rendered at 16, 24, 32 and 48 pixels; Report handler that names, for each PictureBox, whether Image or ImageSource supplied the picture; Format note listing which lab assets travel through System.Drawing and which stay resource strings.

Module 3: Theme Images, URLs, SVG Color and the Designer Image Picker

Module 3 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the theme images walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    Image sources that are not files you ship next to the page: named theme images loaded from the client theme cache, relative and absolute URLs, base64 data embedded in the theme, the Visual Studio Image Selector that writes the source string for you, and the ?color= suffix that recolors a suitable monochrome SVG with a theme color name. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonTheme names, URLs and a recoloured SVG · 14 min

    Theme names, URLs and a recoloured SVG — a guided Module 3 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Icons and Images, Module 3. The image on a control is often not a file you ship beside the page, but a source string, and the IconGallery screen fills five slots five different ways.

    Module 2 left IconDesk with a typed path for every look, which is fine until the look has to change. A theme can supply the picture as a relative URL, an absolute URL or embedded data, or as a named image, and only the named image adds a layer of indirection.

    Assigning a theme image name to ImageSource opens no file and creates no System.Drawing.Image. The name is a key the client resolves from the theme it has already loaded, which is why a different theme can supply different artwork without any change to your C# code.

    The design-time Image Selector browses project images, theme images and every icon pack the project references, with a preview of each one. For monochrome icons it also previews the colour, so a recolouring decision is made by looking rather than by rebuilding and refreshing.

    Read what the picker wrote. Designer.cs holds a resource source string that points back at the assembly holding the artwork, never a copy of the file itself. The same string can be computed at runtime, which matters when the icon depends on state rather than on layout.

    Adding the colour suffix to a source string recolours a suitable monochrome vector icon. A literal colour works, but a theme colour name is better, because the icon then follows the theme instead of pinning one value that a future palette change will quietly contradict.

    Running IconGallery, five slots are filled by a theme key, a relative URL, an absolute URL, a pack resource and a recoloured vector icon. They look equally settled, yet only the absolute URL depends on a host you do not control, and that is worth knowing before deployment.

    Now switch themes. The theme key resolves to new artwork, and the theme colour named in the suffix changes with it. The three sources that named exact artwork stay identical, which is the practical difference between a semantic reference and a literal one.

    Lab three: fill IconGallery through the Image Selector, recolour one monochrome icon with a theme colour name, read the strings in Designer.cs, and write the theme-switch note.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 3 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — Theme Images, the Image Selector and Recolouring · 45 min

    Objective: Fill an IconGallery page in IconDesk using the designer Image Selector instead of typing source strings by hand. Assign images to five controls: one named theme image, one project SVG referenced by relative URL, one absolute URL and at least two icon-pack assets if a pack is installed. Recolor one monochrome SVG with the ?color= suffix and a theme color name, open the generated Designer.cs and read the image-source strings the picker produced, then switch the application between two Wisej themes and record which assets changed and which stayed exactly the same. Deliverables: IconGallery page with five controls whose images were assigned through the designer Image Selector; One named theme image, one relative project SVG, one absolute URL and at least two icon-pack assets among them; Monochrome SVG recoloured through the ?color= suffix with a theme colour name; Designer.cs excerpt showing the image-source strings the picker generated; Theme-switch note recording which assets followed the theme and which stayed fixed.

Module 4: Wisej.NET Icon Packs and NuGet

Module 4 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the icon-pack walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    What an icon pack really is: a .NET assembly carrying hundreds of SVG files as embedded resources, addressed individually through resource.wx and cached by the browser one icon at a time, installed from the official Wisej-4 NuGet packages, browsed in the Visual Studio image explorer and referenced from C# through the pack's icon catalog. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonInstall a pack, pick an icon, read the generated URL · 14 min

    Install a pack, pick an icon, read the generated URL — a guided Module 4 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Module 4. IconDesk needs five icons today and perhaps forty more this quarter. Collecting them file by file gives you several stroke weights, no shared style and no record of where anything came from.

    An icon pack is an ordinary .NET assembly whose artwork is stored as embedded resources. One file in the output folder can carry hundreds or thousands of icons, and each one stays individually addressable through the resource handler, so nothing is bundled into a single unusable blob.

    The two mechanisms deliver differently, and that decides where each belongs. Pack icons are pulled: one request the first time an icon is used, then the browser cache. Theme images are pushed, preloaded together with the theme, which is why very large catalogues belong in a pack.

    Install the packs from the official Wisej-4 packages and keep their major versions aligned with the framework. Then build the project before looking for them, because the image explorer lists only the packs the project has actually compiled against.

    Pick an icon and read what the designer generated: the resource handler, the pack assembly, the icon file, and optionally the colour suffix. Every part of that string is checked at run time, which is why a filename typed from memory resolves to nothing at all.

    In C#, prefer the pack's icon catalogue over a hand-written string, so a rename becomes a compiler error instead of a blank control. The exact namespace varies from pack to pack. Set one image property per control, and keep a caption beside any icon that carries meaning.

    The IconCompare page shows the same five concepts drawn by two families, which makes the stylistic difference obvious in a way a catalogue page never does. Two monochrome icons accept the colour suffix with a theme colour name; multi-colour artwork simply ignores it.

    The network panel supplies the evidence: one request per icon on the first load, and cache hits on the reload. A recommendation backed by that is defensible, and it also shows why referencing a large pack does not cost the learner a large download.

    Lab four: reference two Wisej-4 packs, build an IconCompare page from both, pick at least five icons in the explorer, recolour two, and name the project's primary icon family.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 4 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — Two Icon Packs, Side by Side · 45 min

    Objective: Add two official Wisej-4 icon-pack NuGet packages to IconDesk and build an IconCompare page that shows the same five concepts, Save, Delete, Search, User and Settings, drawn from both families so the visual difference is impossible to miss. Pick at least five of the icons through the Visual Studio image explorer rather than typing the path, assign the rest from the pack catalog in C#, recolor two of them with the ?color= suffix, and watch the network panel to see icon files arriving one request at a time and then coming from the browser cache. Close with a short recommendation naming the primary icon family for the project. Deliverables: Two official Wisej-4 icon-pack NuGet packages referenced by IconDesk; IconCompare page showing Save, Delete, Search, User and Settings from both packs; At least five icons chosen through the Visual Studio image explorer rather than typed by hand; Two icons recoloured with the colour suffix and a note on which artwork accepted the recolour; One-paragraph recommendation naming the project's primary icon family, with the browser-cache evidence behind it.

Module 5: Embedded Resources and resource.wx

Module 5 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the embedded-resources walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    Shipping images inside the assembly: Build Action set to Embedded Resource, the resource.wx handler with and without an assembly qualifier, the css, js, html, jpg, jpeg, png, gif, svg and bmp extensions it will serve, and the deployed file that can override an embedded resource without a rebuild. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonEmbed it once, address it with resource.wx · 14 min

    Embed it once, address it with resource.wx — a guided Module 5 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Icons and Images, Module 5. Five IconDesk assets stop being loose files beside the application and start shipping inside the assembly, addressed by a string instead of by a path on disk.

    Artwork deployed next to the application is one missed copy step away from broken. The server answers with a not-found, the control draws nothing, and the file is still present on the developer's machine, which is why the problem usually survives until somebody else runs the build.

    There is no API for this. Add the file to the project and set its build action to Embedded Resource, and the bytes move into the assembly manifest. That single property is also what turns an ordinary class library into an icon pack, as Module 6 will show.

    Address the resource as a string. Without an assembly name, Wisej.NET searches the loaded assemblies for a matching resource. Naming the assembly explicitly, written without the file extension, removes the ambiguity when two assemblies could each contain a file with the same name.

    The handler serves exactly nine extensions: stylesheets, scripts, HTML, JPEG in both spellings, PNG, GIF, vector graphics and bitmaps. Nothing else is served, so an icon file embedded with high hopes is still a not-found, and the fix is converting it rather than debugging the URL.

    A file deployed with the application can answer the same address before the embedded copy does. That is genuinely useful for a customer re-brand or an urgent fix with no rebuild, and it also means the folder holding those overrides is now something you have to protect.

    In the browser, five requests return five successful responses, all served out of the application assembly, and the reload comes from the cache instead. The vector artwork stays markup the whole way through; at no point does it become a System.Drawing image.

    Dropping a replacement logo beside the deployed application changes the picture with no rebuild at all. Then one doubled letter in a resource name produces a not-found, and the six-step checklist finds it at step four, which is faster than reading the code again.

    Lab five: embed five assets, show them all on ResourceLab, qualify one source with the assembly name, override one with a deployed file, and write up the not-found hunt.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 5 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — Embedding, Qualifying and Overriding Resources · 45 min

    Objective: Add a Resources folder to the IconDesk application holding logo.svg, status-ok.svg, status-warning.svg, photo.png and badge.gif, and set every one of them to Build Action Embedded Resource. Build a ResourceLab page that shows all five through resource.wx image sources, write one of those sources with the application assembly name in front of the file so the lookup cannot be ambiguous, and leave the rest unqualified. Then drop a replacement file next to the deployed application to override one embedded resource and capture the before and after. Finish by deliberately misspelling one resource URL and writing down the steps that identified the failure. Deliverables: Resources folder with logo.svg, status-ok.svg, status-warning.svg, photo.png and badge.gif all marked Embedded Resource; ResourceLab page displaying every embedded asset through a resource.wx image source; One image source qualified with the application assembly name and the rest left unqualified; Deployed file that overrides one embedded resource, captured before and after; Troubleshooting note listing the steps that identified a misspelled resource URL.

Module 6: Building Your Own Wisej.NET Icon Pack

Module 6 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the custom icon pack walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    The four-step recipe behind every icon pack: a class library, a Resources directory, icon files marked Embedded Resource, and a static catalog of resource.wx strings that gives the team IntelliSense instead of magic paths, plus the naming, versioning, recoloring and override practices that keep the pack maintainable. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonTwelve SVGs become a reusable icon pack · 14 min

    Twelve SVGs become a reusable icon pack — a guided Module 6 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Module 6. IconDesk now uses icons everywhere and owns none of them. The remedy is a pack of its own: a class library, a Resources directory, and twelve vector icons marked as embedded resources.

    At the moment the same icon is spelled four slightly different ways across four screens. Every one of those paths is a string, so three of them compile perfectly and fail only in the browser, which moves the mistake from the build to a customer's screen.

    The documented recipe has four steps: create a class library, create a Resources directory, put the icons in it, and set their build action to Embedded Resource. What comes out is one address made of the handler, the assembly name and the resource path. Confirm it once against the running application.

    The catalogue turns that address into IntelliSense. One private constant holds the shared part of the path, and one public constant per icon names the concept rather than the file, so callers write a product name like Save or Warning instead of repeating a path.

    Two routes end at the same string. The Image Selector writes it into Designer.cs when a layout decision picks the icon, and runtime code reads it from the catalogue when application state decides. And the vector artwork is still markup the client resolves, never a System.Drawing image.

    It runs. Twelve icons come from one referenced assembly, arriving one request at a time as each is first used, and served from the browser cache on the next load. Nothing in the application needed to know where on disk the artwork lives.

    The colour suffix recolours two icons and is ignored by the third, because that file has a colour hard-coded into the artwork. Strip the hard-coded value from the markup, then check the result again in a dark theme rather than assuming the fix carried over.

    Three habits keep the pack maintainable: one concept per icon, the catalogue treated as the pack's public API so renaming stays a compiler concern, and a documented override path for an application that needs different artwork under the same familiar name.

    Lab six: build the IconDesk.Icons library with twelve embedded icons and the catalogue, assign some in the designer and some from code, check three recolours, and write the versioning rules.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 6 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — IconDesk.Icons: Your Own Pack · 45 min

    Objective: Create IconDesk.Icons as a class library beside the application, put at least twelve SVG icons in a Resources directory and mark them Embedded Resource. Add a static AppIcons catalog that exposes each icon as a named resource.wx string so callers never type a path, reference the library from IconDesk, then assign some icons through the designer and others from the catalog in C#. Verify the colour suffix on three icons and write down the SVG cleanup any of them needed. Finish with the naming and versioning rules that decide how a new icon enters the pack. Deliverables: IconDesk.Icons class library with at least twelve SVG files in a Resources directory, all Embedded Resource; Static AppIcons catalog exposing every icon as a named resource.wx string; IconDesk page assigning some icons through the designer and others from the AppIcons catalog; Three icons verified with the colour suffix plus a note on the SVG cleanup they needed; Naming and versioning rules describing how a new icon enters the pack and how an application overrides one.

Module 7: Icon Fonts, HTML Content and Production Icon Strategy

Module 7 of Icons and Images in Wisej.NET — use icon packs, SVGs, bitmaps, embedded resources and icon fonts to build crisp, maintainable interfaces. Read the lesson guide and the lab / exam guide, watch the icon-font & production-policy walkthrough, pass the knowledge check, then complete the hands-on lab in IconDesk.

  1. ReadingLesson Guide · 14 min

    The last mechanism and the policy that binds all of them: an icon-font stylesheet loaded from Default.html, AllowHtml on the controls that should interpret markup, icon glyphs inside DataGridView cells with role-based element clicks, and a production checklist covering accessibility, licensing, caching, external dependencies and visual consistency. What this means for a developer who knows basic C# and has done some Wisej.NET control and designer work — and how to read this module.

    Read the lesson guide (PDF)

  2. ReadingLab / Exam Guide · 10 min

    What you'll build in the hands-on lab, the suggested approach, and the required deliverables.

    Read the lesson guide (PDF)

  3. Video lessonIcon fonts, HTML content and the production policy · 14 min

    Icon fonts, HTML content and the production policy — a guided Module 7 walkthrough, built step by step in IconDesk. Runs right here in the player.

    Narration transcript

    Icons and Images in Wisej.NET, Module 7, the capstone. IconDesk can already draw an icon five different ways. Now it gains a sixth, and more importantly the written rule that decides between them.

    An image object, an image-source string, a theme image, an embedded resource, and now an icon font. Six mechanisms with no written first choice is how the same Delete command ends up looking different on three screens of the same application.

    An icon font skips the image pipeline entirely. One stylesheet link in the application's Default.html lets the browser fetch the CSS and the font files, and a CSS class placed inside text on a control that allows HTML draws the glyph as a character.

    Neither approach wins outright. Wisej resources bring recolouring, the image selector and real image properties. Fonts bring an existing CSS design system and let a glyph sit inline with text. Whether that stylesheet comes from a public network or your own server is a genuine decision.

    In code the two decisions sit at different levels. The stylesheet link is a page-wide decision; allowing HTML is a per-control decision you make deliberately. Two glyphs carrying different roles can then share one grid cell, and the click reports which element was actually hit.

    Here is the policy. Theme images for semantic, theme-following artwork. One primary pack for commands. The custom pack for product artwork you own. Raster formats for photographs. Icon fonts only where the HTML integration genuinely pays for the extra dependency.

    The summary page runs all five mechanisms at once. Switch the theme and only the theme image and the recoloured vector icon follow it. The pack icon, the custom-pack icon and the embedded asset stay exactly as drawn, which is the behaviour the policy is written around.

    The action column answers two different clicks from a single cell by reading the role of the element that was hit. The quality pass then repeats in a dark theme, checking that every glyph is still readable and every action still carries a name a screen reader can announce.

    The capstone: the stylesheet and one toolbar that allows HTML, the role-aware grid column, the summary page covering five mechanisms, the written icon policy, and a light and dark quality note.

  4. ReadingAI Coding Exercise · 20 min

    Build this module's IconDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you.

    Read the lesson guide (PDF)

  5. Knowledge checkModule 7 Knowledge Check · 10 min · Pass mark 80%
  6. Hands-on labLab — Capstone: the IconDesk Icon Policy · 45 min

    Objective: Finish the IconDesk capstone. Reference an icon-font stylesheet from Default.html, set AllowHtml on a small toolbar or card and render its icons as font glyphs, then build a DataGridView column whose cells hold icon-font actions and read which element the user clicked so Edit and Delete do different things. Build a summary page that demonstrates every mechanism the course covered at once: a theme image, an official pack icon, a custom pack icon, an embedded logo and a recoloured SVG. Then write the project's production icon policy and run a QA pass in a light and a dark theme. Deliverables: Icon-font stylesheet referenced from Default.html and one AllowHtml toolbar or card rendering font glyphs; DataGridView column whose cells render icon-font actions and respond to the clicked element; IconDesk summary page demonstrating a theme image, an official pack icon, a custom pack icon, an embedded asset and a recoloured SVG; Written production icon policy covering accessibility, licensing, caching and external dependencies; QA pass run in a light and a dark theme with the findings recorded.