簡體   English   中英

如何在 wpf 中為菜單項添加點擊事件?

[英]How to add click event for menu item in wpf?

在 MainWindow.xaml 的按鈕上下文菜單中

<Button.ContextMenu>
                    <ContextMenu x:Name="options"
                                 Opened="OptionsMenu_Opened">

                        <MenuItem Header="Add path"
                                  Click="AddPath"
                                  InputGestureText="Ctrl+P"/>
                        
                        <MenuItem Header="Save logs"
                                  Click="SaveLogs"
                                  InputGestureText="Ctrl+S"/>

                        <MenuItem Header="Clear logs"
                                  Click="ClearLogs"
                                  InputGestureText="Ctrl+D"/>

                        <Separator/>

                        <MenuItem x:Name="allow_edit"
                                  Header="Allow editing"
                                  Click="Allow_edit_Click"/>

                        <MenuItem x:Name="topmost_switcher"
                                  Header="Window top-most"
                                  Click="Switch_Window_Topmost"/>

                        <Separator/>

                        <MenuItem x:Name="filter_setter"
                                  Header="Filter"
                                  Click="Filter_setter_Click"/>

                        <MenuItem x:Name="include_subdir"
                                  Header="Include subdirectories"
                                  Click="Include_subdir_Click"/>

                        <Separator/>

                        <MenuItem Header="View source code"
                                  Click="View_source_code_Click"/>
                    </ContextMenu>
                </Button.ContextMenu>
            </Button>

我添加了“添加路徑”部分:

<MenuItem Header="Add path"
                                      Click="AddPath"
                                      InputGestureText="Ctrl+P"/>

但是當我嘗試編譯項目時出現錯誤,因為 MainWindow 不包含 AddPath :

“MainWindow”不包含“AddPath”的定義,並且找不到接受“MainWindow”類型的第一個參數的可訪問擴展方法“AddPath”(您是否缺少 using 指令或程序集引用?)

在 MainWindow.xaml.cs 中查看時,我看到了其他菜單項的事件,例如 SaveLogs :

private void SaveLogs(object sender, RoutedEventArgs e)
        {
            try
            {
                SaveFileDialog sfd = new SaveFileDialog()
                {
                    Filter = "TXT|*.txt",
                    FileName = $"watcher_{DateTime.Now:yyyyMMddHHmmss}"
                };
                if (sfd.ShowDialog() == true)
                {
                    string path = sfd.FileName;
                    string content = new TextRange(
                    richTextBox_main.Document.ContentStart,
                    richTextBox_main.Document.ContentEnd).Text;

                    File.WriteAllText(path, content);
                    PrintMsg($"saved log to \"{path}\"");
                }
            }
            catch (Exception ex)
            {
                PrintErr(ex);
            }
        }

如何為 AddPath 創建相同的事件類型? 如何解決此錯誤?

在 WPF 世界中,您確實應該考慮 MVVM 方法而不是代碼背后。 在 MVVM 方法中,您將使用命令綁定,而不是單擊事件。

例如:

 <MenuItem Header="Add path" Command="{Binding AddPathCommand}" />

當然,如果您通常沒有視圖的視圖模型,這可能需要進行一些重大更改。 但是大部分東西已經寫在一些 mvvm 框架中,比如 MvvmLight、Prism 等。

我強烈建議您使用命令綁定通過 MVVM 方法。 https://www.c-sharpcorner.com/UploadFile/6f0898/learn-simple-mvvm-and-command-bindings-in-15-mins/

暫無
暫無

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

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