我在Window.Resource部分中定义了ContextMenu和ColumnHeaderStyle,我将它用于DataGrid ColumnHeader。我的代码是这样的:
<ContextMenu x:Key="cm_columnHeaderMenu"/>
<Style x:Key="DefaultColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContextMenu" Value="{StaticResource cm_columnHeaderMenu}" />
</Style>
<DataGrid Grid.Column="2" Grid.Row="1" x:Name="dgridFiles" IsReadOnly="True"
ColumnHeaderStyle="{StaticResource DefaultColumnHeaderStyle}">
我想知道我是否可以(如果答案是真的,那么我怎么做呢)将ContextMenu Visibility属性绑定到同一个控件ContextMenu Items.Count&gt; 0属性。
最初基于其他一些treeView控件选择,上下文菜单中没有项目,但我希望根据treeView中的选择在ContextMenu中添加dinamically项目。这部分完成,上下文有这些项目。在某些选择中没有项目,但仍然在网格上它出现一个空的ContextMenu。因此,我认为最简单的方法是将Visibility绑定到同一控件的Items.Count属性。
对不起,如果我的英语不够好,如果我第一次没有说清楚,我会尝试更好地解释。
答案 0 :(得分:2)
您希望通过RelativeSource
绑定,尤其是Self
模式
我认为通过阅读this或this,您将能够实现目标。
然后,您将需要一个绑定转换器将整数值转换为Visibility
属性的匹配类型和值。你会找到一个简短的教程here。
此致
答案 1 :(得分:1)
使用它可以绑定到同一控件中的属性
Visibility="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}"
您还必须使用转换器来实现您想要的效果。
答案 2 :(得分:0)
尝试使用转换器将项目计数的值转换为布尔值。所以你最终会得到像
这样的东西<ContextMenu Visibility={Binding RelativeSource={RelativeSource Self},
Converter={StaticResource ItemsToVisibilityConverter}, Path=Items.Count}} />
如果这不起作用,请尝试使用数据触发器(无论如何仍然需要转换器,这表明转换器在工作):
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a8ad8c14-95aa-4ed4-b806-d0ae874a8d26/