首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WPF中使用MenuItem命令

在WPF中使用MenuItem命令
EN

Stack Overflow用户
提问于 2013-05-17 04:33:51
回答 2查看 1.9K关注 0票数 2

所以我有一个MenuItem,它使用CultureInfo的列表作为项目源。

我要做的是在单击/选择CultureInfo时触发一个函数,这应该是将应用程序的本地化更改为所选的区域性信息。我可以有把握地说,这个函数正在按其应有的方式工作。在研究和尝试了几个例子之后,这就是我最后得出的结论,不幸的是,这是行不通的:

代码语言:javascript
复制
<MenuItem Header="{lex:LocText MenuLanguages}" ItemsSource="{Binding LanguageList}" DisplayMemberPath="Name">
        <MenuItem.ItemContainerStyle>
            <Style>
                <Setter Property="MenuItem.Command" Value="{Binding SetLanguage}" />
                <Setter Property="MenuItem.CommandParameter" Value="{Binding}" />
            </Style>
        </MenuItem.ItemContainerStyle>
</MenuItem>

命令:

代码语言:javascript
复制
    private ICommand _SetLanguage;
    public ICommand SetLanguage
    {
        get
        {
            if (_SetLanguage == null)
                _SetLanguage = new RelayCommand(ChangeLanguage);
            return _SetLanguage;
        }
    }

    public void ChangeLanguage(object langChosen)
    {
        LocalizeDictionary.Instance.Culture = CultureInfo.GetCultureInfo(langChosen.ToString());
    }

CultureInfo.GetCultureInfo()将字符串作为参数。

项目源基本上是一个ObservableCollection<CultureInfo>

我的问题是,,上面的代码会有什么问题吗?,我已经尝试了很多‘解决方案’,但是没有什么真正有效.

当我从列表中选择一个项目时,什么都不会发生。

*我还试图在ChangeLanguage方法上设置一个断点,这使我得出结论,该方法甚至从不触发。

使用caliburn.microWPFLocalizationExtension扩展。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-17 04:58:12

如果它不起作用,那么绑定是错误的。检查调试窗口中的绑定错误。您需要使用相对资源,因为直接绑定不会做您认为会做的事情。

代码语言:javascript
复制
    <MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
    <MenuItem.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Command" Value="{Binding DataContext.ImportRecentItemCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=1}}" />
            <Setter Property="CommandParameter" Value="{Binding}" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>
票数 3
EN

Stack Overflow用户

发布于 2013-05-17 08:43:58

Menu的LogicalTree与Markup的其他部分不同。出于这个原因,您需要按照Erti-Chris的建议,首先搜索正确的DataContext

而且,每个DataTemplate都有T类型的DataContext,这是绑定ItemsSource列表的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16601459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档