WPF利用ContextMenu实现右键菜单

2025-11-24 05:40:18

1、可以先详细了解下“WPF利用MediaElement编写视频播放器”。完成WPF实现自制视频播放器的创建,在此基础上实现制视频播放器增加右键菜单的功能。

也可以打开VS,选择Visual C#模板创建一个新WPF应用程序,直接复制后续步骤中的的完整代码。

WPF利用ContextMenu实现右键菜单

2、在MainWindow.xaml页面中添加如下代码:

<Window x:Class="MyMedia.MainWindow"


        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="我的播放器-拖动文件执行" Height="350     <Grid >     
        <MediaElement Name="mediaElement1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"   Stretch="Fill" IsMuted="False"  />
        <Grid x:Name="GridDrag" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"  AllowDrop="True" DragEnter="G_DragEnter" DragOver="G_DragOver" Background="#02FFFFFF" ContextMenuOpening="GridDrag_ContextMenuOpening" >
            <Grid.ContextMenu >
                <ContextMenu>
                    <MenuItem Name="M视频"  Header="选择视频文件(_O)" Click="M视频_Click" />
                    <Separator/>
                    <MenuItem Name="M全屏" IsEnabled="False" Header="全屏"/>
                    <Separator/>
                    <MenuItem  Name="M播放" IsEnabled="False" Header="播放" Click="M播放_Click" />
                    <MenuItem Name="M快进" IsEnabled="False" Header="快进"/>
                    <Separator/>
                    <MenuItem Name="M静音" IsEnabled="False" Header="静音" />
                    <MenuItem Name="M音量" IsEnabled="False" Header="音量+" />
                    <MenuItem Name="M音量2" IsEnabled="False" Header="音量-" />
                </ContextMenu>
            </Grid.ContextMenu>
        </Grid>       
    </Grid>
</Window>

WPF利用ContextMenu实现右键菜单

3、在MainWindow.xaml.cs页面中添加如下代码:

using System;


using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MyMedia


{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.mediaElement1.LoadedBehavior = MediaState.Manual;
        }
        private void G_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effects = DragDropEffects.All;
            else
                e.Effects = DragDropEffects.None;
        }
        bool mediaElement1Play = false;
        private void G_DragOver(object sender, DragEventArgs e)
        {
            string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            this.mediaElement1.Source = new Uri(s[0]);
            mediaElement1.Play();
            mediaElement1.Volume = 1;
            mediaElement1Play = true;
        }
        private void GridDrag_ContextMenuOpening(object sender, ContextMenuEventArgs e)
        {
            bool b = this.mediaElement1.HasVideo;
            int count = GridDrag.ContextMenu.Items.Count;
            for (int i = 1; i < count; i++)
            {
                MenuItem m = GridDrag.ContextMenu.Items[i] as MenuItem;
                if (m != null)               
                    m.IsEnabled = b;              
            }
            if (this.mediaElement1Play)           
                M播放.Header = "暂停";
            else
                M播放.Header = "播放";
        }
        private void M视频_Click(object sender, RoutedEventArgs e)
        {
            //这里我们可以采用拖动视频文件进行播放,该文主要讲解ContextMenu右键菜单的使用,为缩短文章篇幅,不增加代码。       
        }
        private void M播放_Click(object sender, RoutedEventArgs e)
        {
            if (this.mediaElement1Play)
                this.mediaElement1.Pause();
            else
                this.mediaElement1.Play();
            this.mediaElement1Play = !this.mediaElement1Play;
        }
    }
}

WPF利用ContextMenu实现右键菜单

4、编译代码,生成解决方案。编译成功后,按F5执行。这时,我们可以移动鼠标到视频窗口中任意位置,点击鼠标右键,将弹出右键菜单。我们会发现很多菜单项是灰色不可执行的,这说明我们在WPF中实现了右键菜单功能。

WPF利用ContextMenu实现右键菜单

5、因为我们没有添加按钮打开视频功能,这里我们采用拖动一个可以播放的视频文件放置到软件窗口中,视频将开始自动播放。

WPF利用ContextMenu实现右键菜单

6、视频播放后,我们再点击鼠标右键,将弹出另一种样式的右键菜单,该右键菜单可以控制视频的暂停和播放了。

WPF利用ContextMenu实现右键菜单

7、以上5个步骤是WPF采用ContextMenu实现右键菜单的一个简单例子。该自制播放器实现了右键菜单打开时菜单样式显示控制,以及自制播放器的一个播放暂停控制,如果需要视频加载文件、全屏、快进、快退、静音等功能,则还需要增加其他代码。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢