一、创建WPF项目
MainWindow.xaml
<Window x:Class="Resolution.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:Resolution"
mc:Ignorable="d"
Title="" Height="150" Width="320" WindowStyle="ToolWindow">
<Grid>
<Button x:Name="calBtn" Content="计算分辨率比例" HorizontalAlignment="Left" Margin="77,61,0,0" VerticalAlignment="Top" Width="135" FontSize="16" Click="calBtn_Click"/>
<Label x:Name="rateText" Content="16 : 9" HorizontalAlignment="Left" Margin="217,56,0,0" VerticalAlignment="Top" FontSize="20" Background="#00000000" Foreground="Red"/>
<Label Content="分辨率:" HorizontalAlignment="Left" Margin="10,16,0,0" VerticalAlignment="Top" FontSize="16"/>
<TextBox x:Name="widthText" InputMethod.IsInputMethodEnabled="False" HorizontalAlignment="Left" Height="23" Margin="78,20,0,0" TextWrapping="Wrap" Text="1920" VerticalAlignment="Top" Width="90" FontSize="18"/>
<TextBox x:Name="heightText" InputMethod.IsInputMethodEnabled="False" HorizontalAlignment="Left" Height="23" Margin="195,20,0,0" TextWrapping="Wrap" Text="1080" VerticalAlignment="Top" Width="90" FontSize="18" PreviewTextInput="tb_PreviewTextInput"/>
<Label Content="×" HorizontalAlignment="Left" Margin="169,14,0,0" VerticalAlignment="Top" FontSize="20"/>
</Grid>
</Window>
MainWindow.xaml.cs
using System;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Input;
namespace Resolution
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
rateText.Content = string.Empty;
}
private void calBtn_Click(object sender, RoutedEventArgs e)
{
rateText.Content = string.Empty;
if (string.IsNullOrEmpty(widthText.Text) || string.IsNullOrEmpty(heightText.Text))
return;
string widthStr = widthText.Text.Trim();
string heightStr = heightText.Text.Trim();
if (string.IsNullOrEmpty(widthStr) || string.IsNullOrEmpty(heightStr))
return;
int width = int.Parse(widthStr);
int height = int.Parse(heightStr);
int gcd = EuclidGcd(width, height);
int w = width / gcd;
int h = height / gcd;
rateText.Content = string.Format("{0} : {1}", w, h);
}
/// <summary>
/// 辗转相除法求a和b的最大公约数
/// </summary>
private int EuclidGcd(int a, int b)
{
if (b > a)
{
int tmp = a;
a = b;
b = tmp;
}
while (b != 0)
{
int tmp_b = b;
b = a % b;
a = tmp_b;
}
return a;
}
private void tb_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Regex re = new Regex("[^0-9.-]+");
e.Handled = re.IsMatch(e.Text);
}
}
}
运行测试