我必须使用以下方法从资源字典中使用指定的程序集和相对URI检索对象Canvas
,并将Canvas
绑定到MenuItem
s Icon
。此代码,以获得矢量图形Canvas
是正确绑定到画布对象的大小图标
public Canvas GetVectorGraphic(string assemblyName, string relativeUri, string name)
{
var imageResourceDictionary = new ResourceDictionary();
imageResourceDictionary.Source =
new Uri(assemblyName + ";component/" + relativeUri, UriKind.Relative)
?? new Uri(relativeUri, UriKind.Relative);
if (imageResourceDictionary.Source == null)
return default(Canvas);
return imageResourceDictionary[name] as Canvas;
}
我MenuItem
绑定是
<Style x:Key="MenuItem" TargetType="{x:Type Controls:MenuItemEx}">
<Setter Property="Icon">
<Setter.Value>
<Image Source="{Binding IconSource}" Width="16" Height="16"/>
</Setter.Value>
</Setter>
...
我也试图
<Setter Property="Icon">
<Setter.Value>
<Rectangle Width="16" Height="16">
<Rectangle.Fill>
<VisualBrush Stretch="Uniform"
Visual="{Binding IconSource}"/>
</Rectangle.Fill>
</Rectangle>
</Setter.Value>
</Setter>
你可以看到,我都在尝试将高度在Canvas
到16 x 16直接,也通过恢复填充大小的矩形,但这是失败 - 它只是导致一个空白图像。如果我忽略了Height
和Width
规范,则生成的图形太大。
我也试图调整Canvas
当我通过
...
Canvas c = imageResourceDictionary[name] as Canvas;
c.Height = 16;
c.Width = 16;
return c;
从词典阅读但这会造成图像消失。
如何正确调整我的Canvas
对象以适合我的MenuItem
?
编辑(部分答案):
我来翻过很多很多帖子,但没有就解决所有我在一个岗位有问题。问题:
- 未使用矢量图形显示任何图像。 [已解决]
- 获取图像显示但未正确缩放。 [求助]
- 获取缩放和显示的图像,但一次只能显示一个。 [求助]
- 图像被缩放并显示所有需要的MenuItems,但知道顶级菜单项有一个不需要的余量。 [ON GOING]
我如何解决所有,但最后一个问题是1.使用正确的图像源矢量图形,在这种情况下,我发现填充矩形做了这项工作。 2.您可以直接绑定到Icon对象来获取图像,但是没有真正的适当缩放这些图像的方法。 3.您可以通过使用矩形缩放图像,设置为Width
和Height
并填充为VisualBrush
,但这会在MenuItems
之间分配资源,因此只有一个会显示出来。要使图标不共享,您必须创建一个静态资源并设置x:Shared="False"
。最终的XAML看起来像
<Rectangle x:Key="MenuItemIcon" x:Shared="False"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Width="16" Height="16">
<Rectangle.Fill>
<VisualBrush Stretch="Uniform" Visual="{Binding IconSource}"/>
</Rectangle.Fill>
</Rectangle>
<Style x:Key="MenuItem" TargetType="{x:Type Controls:MenuItemEx}">
<Setter Property="Icon" Value="{StaticResource MenuItemIcon}"/>
<Setter Property="InputGestureText" Value="{Binding InputGestureText}"/>
<Setter Property="Caliburn:Action.Target" Value="{Binding}"/>
<Setter Property="Caliburn:Message.Attach" Value="{Binding ActionText}"/>
</Style>
突出问题
我现在已经在顶级项目也移动到右边的问题(如图中下方的红色箭头),因为矩形的尺寸是硬编码为16。然而,结合Witdh
和Height
似乎会导致图像再次消失......
我现在要尝试到模板菜单项,并设置图标区域自动合拢。任何其他的解决方案,欢迎...
看看[此触发(http://pastebin.com/iM6agQ6j)在菜单项的风格帮你崩溃的空白。 – pushpraj 2014-09-21 12:20:41