The Visual Studio Image Library distributes xaml icons with a root
element of Viewbox.
It's possible to refer to the PNG files directly with <Image
Source="..."> but I'm not sure you can refer to the Viewbox xaml files
directly, though maybe there's a pack URI dark magic incantation.
You could build each icon file as a resource in the assembly and load
the Viewbox instance directly with using Application.GetResourceStream()
and XamlReader.Load() and set MenuItem.Icon with a little bit of
reusable code. e.g.
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/app-development/wpf-application-resource-content-and-data-files?view=netframeworkdesktop-4.8
Back when I was working with WPF more (and if I recall correctly) the
image resources were defined in our code as DrawingImage/GeometryDrawing
instead of Viewbox, which you could bind to Image.Source, there may be a
tool out there to convert those VS files.
The markup method though is as you suggest, throw all viewbox elements
into a ResourceDictionary and give each viewbox a resource key, then
merge that resource dictionary into Window.Resources of each window xaml
definition, or if you don't want to do that for each window add them to
the app resources in the App.xaml file.
The resource dictionary option looks like this:
MyResourceDictionary.xaml -
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Viewbox x:Key="AddDocument" x:Shared="false" ... />
</ResourceDictionary>
MainWindow.xaml -
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File" >
<MenuItem Header="_New" Icon="{StaticResource AddDocument}" />
</MenuItem>
</Menu>
</DockPanel>
cheers,
Tony
On 28/07/2024 17:56, Greg Keogh via ozdotnet wrote:
Folks, in a video I saw a few weeks ago I learned that the Visual
Studio team uses XAML for most of their images, not png or similar.
I'm keen to do the same because I imagine that I would no longer need
tedious sets of 16x16 32x32 48x48 ... etc images because each XAML
file is composed from scalable geometry elements that would look good
at any size.
I downloaded the Image Library
<https://www.microsoft.com/en-us/download/details.aspx?id=35825> which
contains thousands of XAML, png and svg sets of standard images. But I
can't figure out how to /simply/ use the XAML files in a WPF app. All
the examples I can find seem to have pasted the contents of the XAML
images into resource files and then reference them by x:Key. I don't
want to manually paste XAML around like that, I just want to add a
file like *FolderClosedBlue.xaml* (for example) to my project and use
it as the icon for a menu or button as simply as possible. How can I
replace this sort of thing?...
<MenuItem Header="_Foo Command" Command="...">
<MenuItem.Icon>
< use the XAML image file somehow instead of a resource png? >
</MenuItem.Icon>
</MenuItem>
Is there some coding trick I'm not aware of to /simply/ use an image
defined in a XAML file in my app?
Cheers, /Greg K/
--
ozdotnet mailing list
To manage your subscription, access archives: https://codify.mailman3.com/