none
Context menu on a ListView with no selected item RRS feed

  • 问题


  • 这个问题与我遇到的是一样的,在网上找到了这个贴子,但也没有具体解决。真心希望论坛的各位能帮助研究一下

    原文网址:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cd3c39fe-addb-4c29-8264-bb923a94f171/

    Context menu on a ListView with no selected item
    Hello,
    I have a context menu in a ListView. The context menu contains 3 items and each item is linked to a command. The commands contains CanExecute entries to specifiy which items must be enable in the menu, depending on the current selection. The menu contains an "Insert" item to insert a new entry in the list.
    The problem is that, when no entry is selected in the ListView (the list is empty or no item selected), WPF does not call the CanExecute method and always disables the menu.
    Is there anything I can do in XAML to have the menu working correctly in this case?

    Here is the ListView definition:

    Code Snippet

          <ListView Name="lst_Account" MouseDoubleClick="DoEditAccount">
            <ListView.CommandBindings>
              <CommandBinding Command="{x:Static cmd:CCommands.New}"    CanExecute="IsAccountingOpen"  Executed="DoNewAccount" />
              <CommandBinding Command="{x:Static cmd:CCommands.Edit}"   CanExecute="IsAccountSelected" Executed="DoEditAccount" />
              <CommandBinding Command="{x:Static cmd:CCommands.Delete}" CanExecute="IsAccountSelected" Executed="DoDeleteAccount" />
            </ListView.CommandBindings>
            <ListView.ContextMenu>
              <ContextMenu>
                <MenuItem Command="{x:Static cmd:CCommands.AccountNew}"  Header="_Nouveau..." InputGestureText="Insert" ToolTip="Crée un nouveau compte" />
                <MenuItem Command="{x:Static cmd:CCommands.AccountEdit}" Header="_Modifier"   InputGestureText="Enter"  ToolTip="Modifie le compte" />
                <MenuItem Command="{x:Static cmd:CCommands.AccountDel}"  Header="_Effacer..." InputGestureText="Delete" ToolTip="Supprime le compte" />
              </ContextMenu>
            </ListView.ContextMenu>
            <ListView.ItemContainerStyle>
              <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
              </Style>
            </ListView.ItemContainerStyle>
            <ListView.View>
              <os:CGridView>
                <GridViewColumn Width="159" DisplayMemberBinding="{Binding Name}">
                  <GridViewColumn.Header>
                    <GridViewColumnHeader Name="hdr_AccName" Content="Compte" HorizontalContentAlignment="Left" Click="SortAccountsByName"/>
                  </GridViewColumn.Header>
                </GridViewColumn>
                <GridViewColumn Width="80">
                  <GridViewColumn.Header>
                    <GridViewColumnHeader Name="hdr_AccBalance" Content="Solde" HorizontalContentAlignment="Right" Click="SortAccountsByBalance"/>
                  </GridViewColumn.Header>
                  <GridViewColumn.CellTemplate>
                    <DataTemplate>
                      <TextBlock Text="{Binding BalanceStr}" TextAlignment="Right"/>
                    </DataTemplate>
                  </GridViewColumn.CellTemplate>
                </GridViewColumn>
              </os:CGridView>
            </ListView.View>
          </ListView>

    2009年12月27日 11:03

全部回复

  • 你的论坛地址已经给说明了 你可以定义listview 的鼠标右击事件来完成你的需求
    2009年12月28日 8:25
  • 楼主你好,
    你用PreviewMouseRightButtonDown事件不能解决吗?

    谢谢。
    Jim Zhou -MSFT
    2009年12月28日 13:07
    版主
  • 楼主你好,
    你用PreviewMouseRightButtonDown事件不能解决吗?

    谢谢。
    Jim Zhou -MSFT

    您好。那个事件不能解决此问题。
    2009年12月30日 9:36
  • 你的论坛地址已经给说明了 你可以定义listview 的鼠标右击事件来完成你的需求

    你好。有多种方法都能完成这一功能。但那不是我想要的。
    2009年12月30日 9:37
  • 你的论坛地址已经给说明了 你可以定义listview 的鼠标右击事件来完成你的需求

    你好。有多种方法都能完成这一功能。但那不是我想要的。

    你还没说清楚你要什么效果
    2009年12月30日 11:46
  • 你的论坛地址已经给说明了 你可以定义listview 的鼠标右击事件来完成你的需求

    你好。有多种方法都能完成这一功能。但那不是我想要的。

    你还没说清楚你要什么效果

    您好:
    我将一个ContextMenu封装为DLL中的资源,并写了一个类封装了一些RoutedUICommand。
    现在,我希望在listmenu中的contextmenu使用前面所提到的东西。
    之所以做得这么复杂,就是希望代码复用程度高一些,以及扩展能灵活一点。
    谢谢。
    2009年12月30日 13:53
  • 你可以自定义用户控件或者自定义重写listview控件
    2009年12月30日 16:31
  • 你可以自定义用户控件或者自定义重写listview控件

    您好
    我所做的,正是正定义控件,但没有实现。
    2010年2月8日 23:14
  • 楼主你好,
    可以把你已经有的code贴出来让大家看看吗?
    谢谢
    Jim Zhou -MSFT
    2010年2月9日 6:52
    版主
  • 楼主你好,
    可以把你已经有的code贴出来让大家看看吗?
    谢谢
    Jim Zhou -MSFT

    您好,以下网址的问题与我的并没有区别,谢谢回复。
    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cd3c39fe-addb-4c29-8264-bb923a94f171/
    2010年2月9日 11:41