WPF利用ContextMenu实现右键菜单

2025-11-01 08:09:10

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。
猜你喜欢