簡體   English   中英

WPF ListboxItem和ContextMenu

[英]WPF ListboxItem and ContextMenu

我有這樣的代碼:

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Vertical" 
                    ContextMenuService.ShowOnDisabled="True">
            <StackPanel.ContextMenu>
                <ContextMenu>
                    <MenuItem Command="Delete" Click="DeleteEvent">      
                    </MenuItem>
                </ContextMenu>
            </StackPanel.ContextMenu>
                <TextBlock Text="{Binding EventName}">
            </TextBlock>        
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

不幸的是它不起作用。 我的上下文菜單被禁用(它正在顯示,但我無法點擊它,因為它被禁用)。 我已經讀過這個問題與選擇問題有關但我沒有找到任何解決方案。 你有什么想法?

首先,奇怪的是你正在嘗試設置Command和Click事件。 你應該設置一個或另一個。 操作被禁用的事實可能是因為您正在設置一個值為CanExecute = false的Command;

您可以嘗試為ListBoxItem設置ItemContainerStyle,而不是編寫DataTemplate,如下所示:

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Delete" Click="DeleteEvent"/>
                    </ContextMenu>
                </Setter.Value>
            </Setter>
            <Setter Property="Content" Value="{Binding Path=EventName}"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

這里我直接設置了ListBoxItem實例的ContextMenu,因此它將在右側控件上顯示菜單。

ListBox已經有一個MenuContext。 你可以嘗試一下

 <ListBox  x:Name="MyistBox">                      
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBox Text="{Binding Name}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Update"/>
                <MenuItem Header="Delete"/>
            </ContextMenu>
        </ListBox.ContextMenu>
    </ListBox>

您只需將命令更改為標頭並處理DeleteEvent

 <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" 
                        ContextMenuService.ShowOnDisabled="True">
                <StackPanel.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Delete" Click="DeleteEvent">      
                        </MenuItem>
                    </ContextMenu>
                </StackPanel.ContextMenu>
                    <TextBlock Text="{Binding EventName}">
                </TextBlock>        
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM