我不得不以下检索方法Canvas
使用命名的组件和相对的URI从一个资源字典对象并结合所述Canvas
的MenuItem
小号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×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
,但这shars之间的资源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
似乎会导致图像再次消失...
现在我要尝试到模板菜单项,并设置图标区域自动合拢。 任何其他的解决方案,欢迎...