我在 XAML 3 中定义了菜单项(使用 WPF-MDI):
<MenuItem Header="_Generic" Name="Generic" ToolTip="Generic Visual Studio designer theme"
Command="{Binding Path=SelectGenericTheme}"/>
<MenuItem Header="_Luna" Name="Luna" ToolTip="Blue Windows XP theme"
Command="{Binding Path=SelectLunaTheme}"/>
<MenuItem Header="_Aero" Name="Aero" ToolTip="Windows Vista/7 theme"
Command="{Binding Path=SelectAeroTheme}"/>
以及 ViewModel 中命令和当前选择的定义:
public enum ESelectedTheme
{
Generic,
Luna,
Aero
}
ESelectedTheme _selectedTheme;
ICommand _selectGenericThemeCommand;
public ICommand SelectGenericThemeCommand
{
get { return _selectGenericThemeCommand ?? (_selectGenericThemeCommand = new RelayCommand(param => SelectGenericTheme(),
param => true)); }
}
void SelectGenericTheme()
{
_selectedTheme = ESelectedTheme.Generic;
}
ICommand _selectLunaThemeCommand;
public ICommand SelectLunaThemeCommand
{
get
{
return _selectLunaThemeCommand ?? (_selectLunaThemeCommand = new RelayCommand(param => SelectLunaTheme(),
param => true));
}
}
void SelectLunaTheme()
{
_selectedTheme = ESelectedTheme.Luna;
}
ICommand _selectAeroThemeCommand;
public ICommand SelectAeroThemeCommand
{
get
{
return _selectAeroThemeCommand ?? (_selectAeroThemeCommand = new RelayCommand(param => SelectAeroTheme(),
param => true));
}
}
void SelectAeroTheme()
{
_selectedTheme = ESelectedTheme.Aero;
}
我有 2 个问题(希望在一篇文章中允许):
- 我想将 XAML 中的 IsChecked 属性绑定到选定的值 (_selectedTheme)。我想我需要写一个转换器,但我不知道怎么做。
- 我制作了 3 个 ICommands 副本(每个主题一个)......如果我有 20 个主题怎么办......有没有办法让这个代码参数化?
提前致谢。