如何访问相关的getValue :: String -> String -> String
getValue lang key = (
head $
filter ((== key) . head) langData)
!! getLangIndex lang
?它是在动态创建的,因此我不能只使用xaml文件中的名称。
MenuItem
答案 0 :(得分:1)
CanExecuteRoutedEventArgs
有一个OriginalSource
属性。
MSDN Doc for CanExecuteRoutedEventArgs
OriginalSender
可能是TextBlock
,其中"内部" MenuItem
。您可能需要遍历可视树以查找parent
类型的MenuItem
来自here
的示例代码public static T GetVisualParent<T>(this DependencyObject child) where T : Visual
{
//TODO wrap this in a loop to keep climbing the tree till the correct type is found
//or till we reach the end and haven't found the type
Visual parentObject = VisualTreeHelper.GetParent(child) as Visual;
if (parentObject == null) return null;
return parentObject is T ? parentObject as T : GetVisualParent<T>(parentObject);
}
像这样使用
var menuItem = e.OriginalSource.GetVisualParent<MenuItem>();
if (menuItem != null)
//Do something....
答案 1 :(得分:1)
您始终可以通过将自身绑定到CommandParameter
属性来将命令UI元素传递给命令,例如
<MenuItem ... CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
现在您可以通过CanExecuteRoutedEventArgs的Parameter
属性访问MenuItem:
private void menuItem_canExecute(object sender, CanExecuteRoutedEventArgs e)
{
var menuItem = e.Parameter as MenuItem;
...
}