gpt4 book ai didi

c# - 如何在 WPF 中捕获从子组件到父组件的激活命令?

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:13 26 4
gpt4 key购买 nike

我有一个包含主菜单的 MainWindow。菜单是一个 UserControl,由一个内部带有按钮的 StackPanel 组成。

简化的XAML代码如下:

<Window>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

<local:MainMenu Grid.Column="0"></local:MainMenu> <!-- the navigation menu -->

<ContentControl Grid.Column="1" Content="{Binding CurrentView}" />
</Grid>
</Window>

<!-- The navigation menu UserControl -->
<UserControl Class="MyApp.MainMenu" ...etc... >
<StackPanel>
<Button Style="{StaticResource menuButton}">To do</Button>
<Button Style="{StaticResource menuButton}">Notes</Button>
<Button Style="{StaticResource menuButton}">Settings</Button>
<Button Style="{StaticResource menuButton}">News</Button>
<Button Style="{StaticResource menuButton}">Calendar</Button>
<Button Style="{StaticResource menuButton}">...</Button>
<Button Style="{StaticResource menuButton}">...</Button>
<Button Style="{StaticResource menuButton}">...</Button>
</StackPanel>
</UserControl>

当然,当单击菜单 UserControl 中的 Button 时,我想通知 MainWindow 用户想要导航。 MainWindow 必须更改其 CurrentView 属性。显示相应的 View 。

我遇到的问题是我无法在组件之间进行任何通信。在 WPF 中似乎很难实现这一点。互联网上有教程,但它们没有很好地解释如何以正确的方式进行操作。我认为将 Click 事件处理程序添加到 MainMenu 的每个按钮是个坏主意。我想使用命令解决此问题,并使用命令参数来确定单击了哪个 Button(如果这是好的做法)。

在最理想的情况下,是否可以让菜单只是“发出”类似事件的东西,然后让窗口捕捉到它?这样子控件(菜单 UserControl)就不必知道它的父控件。

有人可以帮助我吗?

最佳答案

有很多方法可以做到这一点。如果您使用的是 MVVM,您可以只执行命令绑定(bind),如果您在 MainWindow View 模型中使用 ExitApp 命令,那么您可以这样做:

<vw:ImgButton Name="Exit" ClickCommand="{Binding DataContext.ExitApp, RelativeSource={RelativeSource  AncestorType={x:Type Window}},Mode=OneWay}"/>

您可以选择在命令参数中提供信息,并在 ExitApp 命令中进行切换。

关于c# - 如何在 WPF 中捕获从子组件到父组件的激活命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49773309/

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