MVVM中多个控件的通用上下文菜单

本文关键字:上下文 菜单 控件 MVVM | 更新日期: 2023-09-27 17:59:23

我有一个WPF窗口,其中有4个只读TextBoxes,我需要启用一个带有复制选项的上下文菜单。目前我正在做代码隐藏。但我听说这不是一个好办法。

<TextBox Name="StepsTextBox" 
         Text="{Binding Steps, Mode=OneWay}" 
         IsReadOnly="True" 
         Click="Copy_click"/>

代码隐藏:

private void Copy_click(object sender, RoutedEventArgs e)
{
    StepsTextBox.Copy();
}

我尝试使用MVVM如下:

<TextBox.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Copy" Command="{Binding OnCopyButtonClick}" CommandParameter="{Binding ElementName=StepsTextBox}"/>
    </ContextMenu>
</TextBox.ContextMenu>

但是,如果我将其作为参数传递,我如何从代码中访问此文本框。还有,我怎样才能让这个代码对所有的文本框都通用?。有人能帮忙吗?。提前谢谢。

private void OnCopyButtonClick(TextBox textBox)
{
    //??
}

MVVM中多个控件的通用上下文菜单

您可以在ApplicationCommands.Copy中使用构建。无需实现任何东西,复制功能已经实现。

<TextBox.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Copy" Command="Copy" />
    </ContextMenu>
</TextBox.ContextMenu>

在复制文本之前,您仍然需要选择文本,但这是在复制文本时所期望的。