【问题标题】:WPF ContextMenu bind some property to another property of the same controlWPF ContextMenu 将某些属性绑定到同一控件的另一个属性
【发布时间】:2011-03-03 10:04:16
【问题描述】:

我在 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 > 0 属性。

最初基于其他一些 treeView 控件选择,上下文菜单中应该没有项目,但我希望根据 treeView 中的选择在 ContextMenu 中添加动态项目。这部分完成了,上下文有这些项目。在某些选择中没有项目,但仍然在网格上显示一个空的 ContextMenu。所以我相信最简单的部分是将 Visibility 绑定到同一控件的 Items.Count 属性。

对不起,如果我的英语不够好,如果我第一次没有说清楚,我会尝试更好地解释。

【问题讨论】:

    标签: c# wpf contextmenu bind visibility


    【解决方案1】:

    尝试使用转换器将项目计数的值转换为布尔值。所以你最终会得到类似的东西

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

    【讨论】:

    • 顺便把Items.Count转成Visibility枚举
    【解决方案2】:

    使用这个你可以绑定到同一个控件中的属性

    Visibility="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}"
    

    你还必须使用转换器来实现你想要的。

    Just in case you need this

    【讨论】:

      【解决方案3】:

      您想通过RelativeSource 进行绑定,尤其是Self 模式。
      我认为通过阅读thisthis,您将能够实现您的目标。

      然后,您需要一个绑定转换器将整数值转换为匹配的类型和Visibility 属性的值。你会发现一个简短的教程here

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        • 2012-12-13
        • 1970-01-01
        • 2010-11-14
        • 2015-09-23
        • 2011-06-22
        相关资源
        最近更新 更多