MenuItem图标返回集合

时间:2016-07-08 08:13:47

标签: wpf xaml

当我有以下代码时,一切正常:

    <Image x:Key="Icons" x:Shared="false"
     Source="{Binding Path=Icon}" Height="16px" Width="16px"/>

    <Style x:Key="MenuItemStyle" TargetType="MenuItem" >
        <Setter Property="MenuItem.ItemsSource" Value="{Binding Children}"/>
        <Setter Property="MenuItem.Header" Value="{Binding Text}"/>
        <Setter Property="MenuItem.IsEnabled" Value="{Binding IsEnabled}"/>
        <Setter Property="MenuItem.Icon" Value="{StaticResource Icons}"/>            
    </Style>

但我必须从外部源加载xaml,WPF有一个在这种情况下不允许x:Shared=的错误。所以我创建了内部编译的x:Name=Icons资源字典(Action是具有字符串属性Icon的数据库表,并且有Icon的路径):

<Image x:Key="Icons" x:Shared="False"
     Source="{Binding Path=Action.Icon}" Height="16px" Width="16px"/>

,代码现在看起来

<ResourceDictionary x:Key="IkoniceDict" Source="/MVVM_App;component/View/iconimage.xaml"/>
<Style x:Key="MenuItemStyle" TargetType="MenuItem">
        <Setter Property="MenuItem.Icon" Value="{Binding Source={StaticResource Icons}}"/>

问题是现在我得到(收藏)而不是图像:

enter image description here

请帮帮忙!

2 个答案:

答案 0 :(得分:0)

将资源字典加载到控件中时,不得指定密钥。

<ResourceDictionary Source="/MVVM_App;component/View/iconimage.xaml"/>

修改

我想我不够清楚。只有在单<SomeControl.Resources>标记中只有此内容时,上述内容才有效。

<SomeControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionary>
            <ResourceDictionary Source="/MVVM_App;component/View/iconimage.xaml"/>
        </ResourceDictionary.MergedDictionary>
    </ResourceDictionary>
    <Style x:Key="MyStyleKey" .............>
    </Style>
</SomeControl.Resources>

ResourcesResourceDictionary类型。所有参赛作品必须有x:Key。如果您将x:Key分配给ResourceDictionary Resources内部ResourceDictionary.MergedDictionary标记,则会将字典放入字典中。这就是为什么你需要使用 public void disconnect() { MediaRouter mMediaRouter = (MediaRouter) getApplicationContext() .getSystemService(Context.MEDIA_ROUTER_SERVICE); mMediaRouter.selectRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO, mMediaRouter.getDefaultRoute()); } 告诉XAML解析器合并iconimage.xaml的内容。

答案 1 :(得分:0)

我认为您应该为绑定设置路径属性(将其设置为“来源”):

<Style x:Key="MenuItemStyle" TargetType="MenuItem">
        <Setter Property="MenuItem.Icon" Value="{Binding Path=Source, Source={StaticResource Icons}}"/>

如果未指定路径,则默认为绑定到整个对象(在您的情况下是图标集合)。

Msdn Binding