左键显示控制,右键隐藏控制。可置顶。
XAML:
<Window x:Class="PICEX.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PICEX"
mc:Ignorable="d"
AllowsTransparency="True"
WindowStyle="None"
Background="Black"
WindowStartupLocation="CenterScreen"
Icon="./Images/Icon.png"
Name="main"
Title="PCIEX" MinHeight="300" MinWidth="300" Height="480" Width="640">
<WindowChrome.WindowChrome>
<WindowChrome />
</WindowChrome.WindowChrome>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="8*"/>
</Grid.RowDefinitions>
<DockPanel>
<Image Name="imageview" Source="{Binding Path= path}"/>
</DockPanel>
<Button Background="Transparent" Opacity="0" Click="control_on" MouseRightButtonDown="control_off"/>
<Grid Name="control" Visibility="Visible">
<TextBlock Name="text_out" Margin="10" Height="20" Text="text" VerticalAlignment="Top"/>
<ListBox Height="380" Width="180" Name="songList" Background="Transparent" Foreground="white" MouseDoubleClick="songList_DClick" HorizontalAlignment="Right" VerticalAlignment="Center"/>
<StackPanel Margin="20" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom">
<Button Content="打开" Height="20" Width="45" Click="openD" Background="Beige"/>
<Button Content="前页" Height="20" Width="45" Click="prev" Background="Beige"/>
<Button Content="后页" Height="20" Width="45" Click="next" Background="Beige"/>
<Button Content="幻灯" Height="20" Width="45" Click="run" Name="runBtn" Background="Beige"/>
<Button Content="╧" Height="20" Width="45" Click="top" Name="topBtn" Background="Beige"/>
<Button Content="关闭" Height="20" Width="45" Click="close" Background="Beige"/>
</StackPanel>
</Grid>
</Grid>
</Window>
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;
using System.Windows.Threading;
using static System.Net.Mime.MediaTypeNames;
using System.Drawing;
namespace PICEX
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
List<String> list = new List<string>();//全局List集合
public void openD(object sender, RoutedEventArgs e)//打开图片
{
list.Clear();//清空文件路径列表
songList.Items.Clear();//清空播放列表
Microsoft.Win32.OpenFileDialog open = new Microsoft.Win32.OpenFileDialog();
open.AddExtension = true;
open.DefaultExt = "*.*";
open.Filter = "All files (*.*)|*.*";
open.Multiselect = true;
open.ShowDialog();
open.RestoreDirectory = true;
string fullpath = open.FileName;//全路径包含目录文件名
string path = System.IO.Path.GetDirectoryName(fullpath)!;//目录路径
string[] files = open.SafeFileNames; //文件名称
foreach (var song in files)//将打开的文件名加入播放列表
{
if (!songList.Items.Contains(song))
{
songList.Items.Add(song);
}
}
for (int i = 0; i < songList.Items.Count; ++i)
{
list.Add(path + "/" + files[i]);//将列表文件路径存储到全局List集合
}
int index = 0;
text_out.Text = list[index];
text_out.FontSize = 15;
text_out.Foreground = System.Windows.Media.Brushes.Red;
imageview.Source = new BitmapImage(new Uri(list[index], UriKind.Absolute));
main.Width = imageview.Source.Width;//获取图片宽度
main.Height = imageview.Source.Height;//获取图片高度
return;
}
public void songList_DClick(object sender, RoutedEventArgs e)//双击显示选择图片
{
timer.Stop();
int index = songList.Items.IndexOf(songList.SelectedItem.ToString());
text_out.Text = list[index];
imageview.Source = new BitmapImage(new Uri(list[index], UriKind.Absolute));
}
DispatcherTimer timer = new DispatcherTimer();
public DispatcherTimer Timer { get => timer; set => timer = value; }
public void run(object sender, RoutedEventArgs e)//计时器设置幻灯片间隔时间
{
if (runBtn.Content.ToString()=="幻灯")
{
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 5);//5秒
#pragma warning disable CS8622 // 参数类型中引用类型的为 Null 性与目标委托不匹配(可能是由于为 Null 性特性)。
timer.Tick += new EventHandler(display);
#pragma warning restore CS8622 // 参数类型中引用类型的为 Null 性与目标委托不匹配(可能是由于为 Null 性特性)。
timer.Start();
runBtn.Content = "播放中";
runBtn.Background = Brushes.LightPink;
}
else
{
timer.Stop();
runBtn.Content = "幻灯";
runBtn.Background = Brushes.Beige;
}
}
public void display(object sender, EventArgs e)//幻灯图片显示
{
BitmapImage bitmapImage = (BitmapImage)imageview.Source;//显式转换为位图
string a = System.IO.Path.GetFileName(bitmapImage.UriSource.LocalPath);//从当前图片路径获取当前显示图片的文件名
int index = songList.Items.IndexOf(a);//获取当前图片的数组序列
if (index < songList.Items.Count - 1)
{
++index;
}
else
{
index = 0;
}
text_out.Text = list[index];
BitmapImage pic = new BitmapImage(new Uri(list[index], UriKind.Absolute));
imageview.Source = pic;
return;
}
public void top(object sender, RoutedEventArgs e)//关闭
{
if (topBtn.Content.ToString()== "╧")
{
this.Topmost = true;
topBtn.Content = "╤";
}
else
{
this.Topmost = false;
topBtn.Content = "╧";
}
}
public void close(object sender, RoutedEventArgs e)//关闭
{
this.Close();
}
public void control_on(object sender, RoutedEventArgs e)//显示控制界面
{
control.Visibility = Visibility.Visible;
}
public void control_off(object sender, RoutedEventArgs e)//隐藏控制界面
{
control.Visibility = Visibility.Hidden;
}
public void prev(object sender, RoutedEventArgs e)//前页
{
BitmapImage bitmapImage = (BitmapImage)imageview.Source;//显式转换为位图
string a = System.IO.Path.GetFileName(bitmapImage.UriSource.LocalPath);//从当前图片路径获取当前显示图片的文件名
int index = songList.Items.IndexOf(a);//获取当前图片的数组序列
if (index <= songList.Items.Count - 1 && index > 0)
{
--index;
}
else
{
index = 0;
}
text_out.Text = list[index];
BitmapImage pic = new BitmapImage(new Uri(list[index], UriKind.Absolute));
imageview.Source = pic;
return;
}
public void next(object sender, RoutedEventArgs e)//后页
{
BitmapImage bitmapImage = (BitmapImage)imageview.Source;//显式转换为位图
string a = System.IO.Path.GetFileName(bitmapImage.UriSource.LocalPath);//从当前图片路径获取当前显示图片的文件名
int index = songList.Items.IndexOf(a);//获取当前图片的数组序列
if (index < songList.Items.Count - 1)
{
++index;
}
else
{
index = 0;
}
text_out.Text = list[index];
BitmapImage pic = new BitmapImage(new Uri(list[index], UriKind.Absolute));
imageview.Source = pic;
return;
}
}
}