gpt4 book ai didi

具有多种目标类型的 WPF 命令

转载 作者:行者123 更新时间:2023-12-04 12:49:44 25 4
gpt4 key购买 nike

我对具有不同目标类型的 WPF 命令有点困惑。

所以如果我定义一个命令

<Window.CommandBindings>
<CommandBinding Command="Copy"
Executed="CopyCmdExecuted"
CanExecute="CopyCmdCanExecute"/>

</Window.CommandBindings>

现在我在上下文菜单中使用它:
                    <ContextMenu Name="FolderContextMenu">
<MenuItem Command="Copy"/>
</ContextMenu>

我有一种方法来处理命令:
private void CopyCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{


}

我在一个普通的旧菜单中使用它:
    <Menu  Name="editMenu">
<MenuItem Command="Copy"/>
</Menu>

我理解这一点没有问题。但是如果目标对象是不同的类型,我应该做什么我有点困惑。

假设我有文件夹和用户,它们都有一个带有 New 命令的上下文菜单(以及也有 New 命令的菜单栏编辑菜单)。

执行 New 时,无论是 Folder 还是 User,都执行 CopyCmdExecuted。那么,我现在应该在目标上解复用吗?就像是
   private void CopyCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
if(sender is User)
// Do copy user stuff
if(sender is Folder)
// Do copy folder stuff
}

如果我最终想要复制很多数据类型,这似乎有点烦人。我在这里不明白吗?

(显然,我可以让 Folder 和 User 从带有 DoCopy 的 Copiable 基类继承,但这似乎仍然是错误的。)

最佳答案

您可以发送 CommandParameter当您调用 Command指示您要应用的命令的含义。这是两个 TextBlock元素:

<Grid>
<StackPanel>
<TextBlock Name="textBlock1" Text="File">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem
Command="Copy"
CommandParameter="{Binding PlacementTarget, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<TextBlock Name="textBlock2" Text="Folder">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem
Command="Copy"
CommandParameter="{Binding PlacementTarget, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</StackPanel>
</Grid>

和这个代码隐藏:
    private void CopyCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
var text = (e.Parameter as TextBlock).Text;
Debug.WriteLine("Text = " + text);
}

使用参数来找出哪个 TextBlock上下文菜单适用于。您也可以只使用字符串 "File""Folder"如果这对你有用。

关于具有多种目标类型的 WPF 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com