gpt4 book ai didi

c# - 在 WPF 中使用带有 MenuItem 的命令

转载 作者:行者123 更新时间:2023-11-30 20:57:45 25 4
gpt4 key购买 nike

所以我有这个 MenuItem它正在使用 CultureInfo 的列表s 作为元素来源。
我想做的是在 CultureInfo 时触发一个函数。单击/选择,这应该将应用程序的本地化更改为所选的 cultureinfo。我可以肯定地说该功能正在按预期工作。在研究并尝试了几个例子之后,这就是我最终得到的结果,不幸的是它不起作用:

<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>

命令:

    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()以字符串作为参数。
itemsource 基本上是一个 ObservableCollection<CultureInfo> .

我的问题是上面的代码可能有什么问题?我一直在尝试很多“解决方案”,但没有任何效果......
当我从列表中选择一个项目时,什么也没有发生。

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

使用 caliburn.microWPFLocalizationExtension扩大。

最佳答案

如果不起作用,则绑定(bind)错误。检查调试窗口中的绑定(bind)错误。您需要使用 relativesource,因为直接绑定(bind)不会做您认为会做的事情。

    <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>

关于c# - 在 WPF 中使用带有 MenuItem 的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com