WPF可更改图像,位于menuitem.icon

时间:2018-12-10 07:52:14

标签: wpf image dynamic menuitem

我正在尝试在代码中实现语言菜单,但是我的语言按钮无法向我显示当前语言的正确图像,因此无法正常工作。

我正在尝试使用的代码不正确。但我不知道如何更改它的工作原理:

<MenuItem Click="LangMouseLeftButtonUp" ContextMenuOpening="LangMouseRightButtonUp" x:Name="LangImageIcon">
   <MenuItem.Icon>
      <Style TargetType="MenuItem">
         <Style.Triggers>
           <DataTrigger Binding="{Binding Path=Language.ActualLanguage}" Value="EN">
              <Setter Property="Icon">
                 <Setter.Value>
                   <Image Source="Resources/United_Kingdom.png" Height="20" />
                 </Setter.Value>
              </Setter>
           </DataTrigger>
           <DataTrigger Binding="{Binding Path=Language.ActualLanguage}" Value="DE">
              <Setter Property="Icon">
                 <Setter.Value>
                   <Image Source="Resources/Germany.png" Height="20" />
                 </Setter.Value>
              </Setter>
           </DataTrigger>
         </Style.Triggers>
       </Style> 
   </MenuItem.Icon>
   <MenuItem.ContextMenu>
      <ContextMenu>
          <MenuItem Header="Deutsch" Click="MenuLanguageDE_Click"/>
           <MenuItem Header="Englisch" Click="MenuLanguageEN_Click"/>
      </ContextMenu>
   </MenuItem.ContextMenu>
</MenuItem>

我用作数据触发器的语言类为我提供了实际的语言,并且我想根据此值设置图像。我不想为此使用C#代码,因为我认为wpf可以使用数据绑定来做到这一点,这就是最干净的方法。

我知道样式值在这里不正确。 setter属性也是错误的。至少xaml设计师告诉过我这一点。 目前,我尝试学习xaml代码的原理,是的,我认为这个问题我不了解。 ;)因此,请耐心等待。

谢谢!

编辑: 我要求使用xaml-designer不会杀死我的代码,但是不会显示图像。而是显示“ System.Windows.Style”。

1 个答案:

答案 0 :(得分:0)

我该死的很近。

@nosale您给出了正确的提示。将menuitem.icon更改为menuitem.style后,一切正常!

<MenuItem Click="LangMouseLeftButtonUp" ContextMenuOpening="LangMouseRightButtonUp" x:Name="LangImageIcon">
    <MenuItem.Style>
        <Style TargetType="MenuItem">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Language.ActualLanguage}" Value="EN">
                    <Setter Property="Icon">
                        <Setter.Value>
                            <Image Source="Resources/United_Kingdom.png" Height="20" />
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=Language.ActualLanguage}" Value="DE">
                    <Setter Property="Icon">
                        <Setter.Value>
                            <Image Source="Resources/Germany.png" Height="20" />
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </MenuItem.Style>
    <MenuItem.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Deutsch" Click="MenuLanguageDE_Click"/>
            <MenuItem Header="Englisch" Click="MenuLanguageEN_Click"/>
        </ContextMenu>
    </MenuItem.ContextMenu>
</MenuItem>

感谢您的帮助!