在ContextMenu
内定义ListBox
本身时,有没有办法做到这一点?
我的ListBox设置如下:
<ListBox Name="lbxFoundFiles" Margin="10,115,10,5" SelectionMode="Multiple"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
ItemsSource="{Binding FoundFilesInfo}" ItemTemplate="{DynamicResource FoundFilesListItem}">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Name="cmiCopyClipboard" Header="Copy file to clipboard" Click="cmiCopyClipboard_Click"
IsEnabled="{Binding ElementName=lbxFoundFiles, Path=SelectedItems.Count}"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
但错误信息很清楚(尽管IntelliSense确实知道我在寻找什么):
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=lbxFoundFiles'. BindingExpression:Path=SelectedItems; DataItem=null; target element is 'MenuItem' (Name='cmiCopyClipboard'); target property is 'IsEnabled' (type 'Boolean')
我已经看到了在ListBox之外定义ContextMenu时如何执行此操作的示例,但我需要它才能工作,因此我可以为所有列表框定义静态模板。
更新
我为此准备了一个转换器,但我已经读过我原来的方法也应该有效。
<MenuItem Name="cmiCopyClipboard" Header="Copy file to clipboard" Click="cmiCopyClipboard_Click"
IsEnabled="{Binding ElementName=lbxFoundFiles, Path=SelectedItems, Converter={StaticResource HasItems}}"/>
转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((IList<FileInformation>)value).Count > 0;
}
答案 0 :(得分:2)
要获得ListBox
,您需要引用PlacementTarget
的{{1}},并且可以通过ContextMenu
绑定
RelativeSource
答案 1 :(得分:0)
上次我必须这样做时,我参考了以下文章:
http://www.codeproject.com/Articles/80632/WPF-Context-Menu-on-List-Item