wpf 制作播放视频的屏保程序、而且能分屏显示

这个程序用到了WPF里  “visual_Brush”(主要是为了实现分屏显示) , “UserControl” ,这两个知识点;

  在屏保状态下播放指定文件夹下的视频,而且能分屏显示;

  把编译好的屏保程序(原本是.exe)改名为.SCR 放到C:\Windos\System32下

   现在就可以设置为屏保了:譬如win7系统的 在桌面属性→→个性化设置里→→ 选择屏保程序→→ 这时候就能看到你写的屏保程序的名字了(切记改名.scr);

MainWindow.xaml:

  

<Window x:Class="visual_Brush.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:s="http://schemas.microsoft.com/surface/2008"
        Title="MainWindow" Height="1080" Width="3840"  WindowStyle="None" ResizeMode="NoResize"
        xmlns:local="clr-namespace:visual_Brush" WindowStartupLocation="Manual" Background="Black" Left="0" Top="0"
        MouseDown="Window_MouseDown" TouchDown="Window_TouchDown" Topmost="True">
    <Grid Height="1080" Width="3840" Name="grid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <local:UserControl_Video x:Name="Video" Height="1080" Width="1920" Grid.Column="0"></local:UserControl_Video>
        <Grid x:Name="ExtendedScreenGrid" Height="1080" Width="1920" Grid.Column="1" Background="Black" VerticalAlignment="Top" HorizontalAlignment="Right" >
            <Rectangle  StrokeThickness="0">
                <Rectangle.Fill>
                    <VisualBrush Visual="{Binding ElementName=Video}">
                    </VisualBrush>
                </Rectangle.Fill>
            </Rectangle>
        </Grid>
    </Grid>

</Window>

MainWindow.cs(后台代码)→)→)→)→)→)→)→)→)→)→)→)→

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

private void Window_MouseDown(object sender, MouseButtonEventArgs e)
        {
            this.Close();
        }
    }

UserControl_Video.xaml

<UserControl x:Class="visual_Brush.UserControl_Video"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" Loaded="UserControl_Loaded_1">
    <Grid x:Name="grid">
        <MediaElement Name="myMedia" LoadedBehavior="Play" MediaOpened="myMedia_MediaOpened">
        </MediaElement>
    </Grid>
</UserControl>

UserControl_Video.cs(后台代码)

public partial class UserControl_Video : UserControl
    {
        int i = 0;
        string[] carImageUris = Directory.GetFiles(@"D:\video");//指定文件夹目录

private void UserControl_Loaded_1(object sender, RoutedEventArgs e)
        {
            myMedia.MediaEnded+=new RoutedEventHandler(myMedia_MediaEnded);
            myMedia.Source = new Uri(carImageUris[0], UriKind.Absolute);
        }

void myMedia_MediaOpened(object sender, RoutedEventArgs e)
        {
            myMedia.LoadedBehavior = MediaState.Manual;
            myMedia.Play();
        }

/// <summary>
        /// 当媒体结束时发生
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
         void myMedia_MediaEnded(object sender, RoutedEventArgs e)
         {
             if (i!= carImageUris.Length-1)
             {
                 i++;
                myMedia.Source = new Uri(carImageUris[i], UriKind.Absolute);
             }
           else
            {
                myMedia.Source = new Uri(carImageUris[0], UriKind.Absolute);
                i = 0;
            }
        }
        public UserControl_Video()
        {
            InitializeComponent();
            myMedia.Volume = 100;
            //myMedia.Play();
        }
       void mediaPlay(Object sender, EventArgs e)
       {
            myMedia.Play();
       }

}

  

上一篇:爬虫开发7.scrapy框架简介和基础应用


下一篇:这是BUG吗?