我有一个WPF 4.0应用程序,它使用菜单命令之类的东西中的一些自定义16x16图标。我想(现在)有两套图标,默认的Vista/7-ish和一些XP-ish。我想要的是让当前的操作系统决定使用哪些图标。如何在每个系统主题的基础上定义图标资源?
现在,我已经在指向特定PNG资源的主题资源字典(即Aero.NormalColor.xaml等)中定义了BitmapImage资源。
<!-- Aero.NormalColor.xaml -->
<BitmapImage x:Key="IconSave" UriSource="/MyWPFApp;component/Resources/Icons16/Aero/disk.png"/>
<!-- Luna.NormalColor.xaml -->
<BitmapImage x:Key="IconSave" UriSource="/MyWPFApp;component/Resources/Icons16/Luna/disk.png"/>
港九我的应用程序,要显示一个图标设置图像/图标的源属性作为一个静态资源这些BitmapImages之一。
<Image Source="{StaticResource IconSave}"/>
的想法是,既然WPF加载自动根据当前的OS和主题上一个主题字典,只有一组BitmapImage的资源会被加载和图标会神奇地得到相应的。
但是,这不起作用,我在运行时遇到了可怕的“找不到资源”异常。我的直觉是,这是因为主题文件只能搜索自定义控件,而图像不是。
Blend 4对这些没有任何问题,但它已通过在Aero.NormalColor.xaml上定义了它的特殊DesignTimeResources.xaml文件。 VS2010扼流圈,但它也没有使用DesignData等文件,所以我并不感到惊讶。我目前还有一个单独的资源字典文件(MainSkin.xaml),它被合并到应用程序资源中。引用样式等可以在运行时正常工作。
我在正确的轨道上,只是有点不对吗?我是否需要做一些完全不同的事情才能获得理想的效果?如果是,需要做些什么?
我不得不使用全包URI语法才能使它工作:'pack:// application:,,,, Resources/Icons16/Aero/disk.png'否则,我得到了一个'DirectoryNotFoundException',因为它是看着C:\出于某种原因。 –