近来觉得wpf做出来的界面很拉风,自己也很喜欢搞些小游戏,感觉这做出来的会很炫,很装逼,(满足自己的一点小小的虚荣心)于是就去自学,发现感觉很不错,可是属性N多,太多了,而且质料也少,很多不会用,只会写基本的操作,样式直接百度黏贴在自己改改,于是属于自己的扫雷就出来了,也只能做这等游戏了,用的知识少,代码也不多,wpf属性真是多啊,不过还是得学啊,下面也没什么好说的了,贴代码,扫雷也就一个递归而已,而且vs真心的开发神器啊

XAML

 <Window x:Class="SweepMineUI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="究极版扫雷" Height="" Width="" Background="Wheat" >
<!--WindowStyle="None" ResizeMode="NoResize" AllowsTransparency="True" Background="{x:Null}" Topmost="True"--> <Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/style/b.xaml"/>
<ResourceDictionary Source="/style/lab.xaml"/>
<ResourceDictionary Source="/style/txt.xaml"/>
<ResourceDictionary Source="/style/grid.xaml"/>
<ResourceDictionary Source="/style/canvas.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<!-- 引用外部资源文件 -->
</Window.Resources>
<Window.Triggers>
<!--启动调用-->
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource fanzhuan}"/>
<!--调用的效果-->
</EventTrigger>
</Window.Triggers>
<Grid Margin="0,0,2,2" x:Name="grid" HorizontalAlignment="Center" VerticalAlignment="Center">
<!--<Grid.RenderTransform>
内部样式书写
</Grid.RenderTransform>-->
<Label Margin="60,30,560,540" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="" Content="游戏区" />
<Label Margin="206,35,434,540" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="" Content="未挖:" Name="lw"/>
<Label Margin="335,35,305,540" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="" Content="已挖:" Name="ly"/>
<Label Margin="460,35,180,540" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="" Content="工具:" Name="lg"/>
<Button Height="" HorizontalAlignment="Center" Margin="600,70,65,524" Name="btnInitial" VerticalAlignment="Center" Width="" Click="btnInitial_Click" Content="初级"/>
<Button Height="" HorizontalAlignment="Center" Margin="600,110,65,479" Name="btnCenter" VerticalAlignment="Center" Width="" Click="btnCenter_Click" Content="中级" />
<Button Height="" HorizontalAlignment="Center" Margin="600,150,65,426" Name="btnSenior" VerticalAlignment="Center" Width="" Click="btnSenior_Click" Content="高级"/>
<Button Height="" HorizontalAlignment="Center" Margin="600,200,65,371" Name="btnEnd" VerticalAlignment="Center" Width="" Click="btnEnd_Click" Content="终级"/>
<Button Height="" HorizontalAlignment="Center" Margin="600,250,65,304" Name="btnWa" VerticalAlignment="Center" Width="" Click="btnWa_Click" Content="挖雷"/>
<TextBox Height="" HorizontalAlignment="Center" Margin="600,300,60,259" Name="txtKL" VerticalAlignment="Center" Width="" Text="" RenderTransformOrigin="0.573,-4.696" />
<Button Height="" HorizontalAlignment="Center" Margin="604,330,65,220" Name="btnZB" VerticalAlignment="Center" Width="" Click="btnZB_Click" Content="作弊"/>
<Button Height="" HorizontalAlignment="Center" Margin="605,380,65,176" Name="btnExit" VerticalAlignment="Center" Width="" Click="btnExit_Click" Content="退出"/>
<Canvas Margin="75,78,164,39" Name="canSweep" Height="" Width="" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Window>

后台代码

 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.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace SweepMineUI
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private int[] SweepNum = null;//雷集合索引
private int GNum { get; set; }//挖雷工具数量
private bool BeginWa = false;//是否执行挖雷
private Storyboard Storyboard { get; set; }
public MainWindow()
{
InitializeComponent();
LoadSweepArray();
CreateButton(, );
}
/// <summary>
/// 初始化雷的数量
/// </summary>
/// <param name="Length">雷的数量</param>
private void LoadSweepArray(int Length)
{
SweepNum = new int[Length];
for (int i = ; i < SweepNum.Length;i++ )
{
SweepNum[i] = -;
}
}
private void btnInitial_Click(object sender, RoutedEventArgs e)
{
LoadSweepArray();
CreateButton(, );
}
private void btnCenter_Click(object sender, RoutedEventArgs e)
{
LoadSweepArray();
CreateButton(,);
}
private void btnSenior_Click(object sender, RoutedEventArgs e)
{
LoadSweepArray();
CreateButton(, );
}
private void btnEnd_Click(object sender, RoutedEventArgs e)
{
LoadSweepArray();
CreateButton(, );
}
private void btnZB_Click(object sender, RoutedEventArgs e)
{
if (txtKL.Text == "")
btn_ClickZB();
else
MessageBox.Show("口令无效");
}
private void btnExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void btn_ClickZB()
{
foreach(Control c in canSweep.Children)
{
if(c is Button)
{
Button b = c as Button;
if(b.IsEnabled && b.Content.ToString() == "")
b.Content = b.Tag;
}
}
}
/// <summary>
/// 查找游戏区内所有未挖的雷的数量
/// </summary>
/// <returns>雷的数量</returns>
private int GetSweepCount()
{
int count = ;
foreach(Control c in canSweep.Children)
{
if(c is Button)
{
Button b = c as Button;
//if (b.Content.ToString() == "★")
if (b.Tag.ToString() == "★")
count++;
}
}
return count;
}
/// <summary>
/// 创建雷
/// </summary>
/// <param name="x">x轴列数</param>
/// <param name="y">y轴列数</param>
private void CreateButton(int x, int y)
{
canSweep.Children.Clear();
//四个方向的边距最大能多出1
//double width = (500 - (x + 1) * 1) / x;
//double height = (500 - (y + 1) * 1) / y;
double width = /x;
double height = /y;
canSweep.Width = width * x + x;//自动调整游戏窗口的大小
canSweep.Height = height * y + y;
List<Point> Sweeps = new List<Point>();
for (int i = ; i < x; i++)
{
for (int j = ; j < y; j++)
{
Button bt = new Button()
{
Width = width,
Height = height,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Content = "",
Tag = "",
Name = "bs" + i,
Background = Brushes.Gray,
Margin = new Thickness(i * , j * , i * , j * )//左上右下
};
Sweeps.Add(new Point(bt.Margin.Left, bt.Margin.Top));
bt.Click += btnSweeps_Click;
Canvas.SetTop(bt, j * height);
Canvas.SetLeft(bt, i * width);
canSweep.Children.Add(bt);
btnSweeps_ClickBegin(bt);
}
}
LoadSweeps(Sweeps);
}
/// <summary>
/// 初始化雷区
/// </summary>
/// <param name="Sweeps">雷集合</param>
private void LoadSweeps(List<Point> Sweeps)
{
GNum = SweepNum.Length;
string tag = "工具:";
lg.Content = tag+GNum;//初始化挖雷次数
Random random = new Random();
for (int i = ; i < SweepNum.Length; i++)//生成不同的随机数
{
int s = random.Next(, Sweeps.Count);//随机数取值范围
bool b = true;
foreach (int num in SweepNum)
{
if (num == s)//表示有重复的随机数
{
--i;
b = false;
break;
}
}
if (b)
SweepNum[i] = s;
}
for (int i = ; i < SweepNum.Length; i++)
{
foreach (Control c in canSweep.Children)
{
if (c is Button)
{
Button btn = c as Button;
//btn.Content = btn.Margin.Left + "|" + btn.Margin.Top;
if (btn.Margin.Left == Sweeps[SweepNum[i]].X && btn.Margin.Top == Sweeps[SweepNum[i]].Y)
{
//btn.Content = "★";
btn.Tag = "★";
break;
}
}
}
}
LoadSweepTags();
lw.Content = " 未挖:" + GetSweepCount() + " ";
}
/// <summary>
/// 查找指定区域内雷的数量
/// </summary>
/// <param name="btn">判断的区域</param>
/// <returns>雷数量count</returns>
private int GetSweepCount(Button btn)
{
double left = btn.Margin.Left - ;
double top = btn.Margin.Top - ;
double right = btn.Margin.Right + ;
double bottom = btn.Margin.Bottom + ;
int count = ;
foreach (Control c in canSweep.Children)
{
if (c is Button)
{
Button b = c as Button;
if (b.Margin.Left >= left && b.Margin.Top >= top && b.Margin.Right <= right && b.Margin.Bottom <= bottom)
{
//if (b.Content.ToString() == "★")
if (b.Tag.ToString() == "★")
count++;
}
}
}
return count;
}
/// <summary>
/// 初始化雷区附近数量值
/// </summary>
private void LoadSweepTags()
{
int count = ;
foreach (Control cl in canSweep.Children)
{
if (cl is Button)
{
Button btn = cl as Button;
//if (btn.Content.ToString() == "★")
if (btn.Tag.ToString() == "★")//是雷区则开始初始化数量值
{
foreach (Control c in canSweep.Children)
{
if (c is Button)
{
Button b = c as Button;
double left = btn.Margin.Left - ;
double top = btn.Margin.Top - ;
double right = btn.Margin.Right + ;
double bottom = btn.Margin.Bottom + ;
count = GetSweepCount(b);//得到该区域周围雷的数量
if (b.Margin.Left >= left && b.Margin.Top >= top && b.Margin.Right <= right && b.Margin.Bottom <= bottom)
{
//if (b.Content.ToString() != "★")
//b.Content = count;
if (b.Tag.ToString() != "★")
b.Tag = count;
}
}
}
}
}
}
}
private void btnSweeps_ClickBegin(Button btn)
{
Storyboard = FindResource("btnFZs") as Storyboard;//查找动画
btn.BeginStoryboard(Storyboard);//启动动画
}
/// <summary>
/// 雷单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSweeps_Click(object sender, RoutedEventArgs e)
{
Button btn = (e.Source as Button);
btnSweeps_ClickBegin(btn);
if (GNum < )
{
btnWa.IsEnabled = false;
MessageBox.Show("GAME OVER");
GameOver();
return;
}
if (!BeginWa)
{
if (IsCorrect(btn))
{
ReturnFindSweeps(btn);
}
}
else
{
if (btn.Tag.ToString() == "★")
{
btn.Content = btn.Tag;
btn.Foreground = Brushes.RoyalBlue;
btn.Tag = "☆";
btn.Content = btn.Tag;
lw.Content = " 未挖:" + GetSweepCount() + " ";
ly.Content = " 以挖:" + (SweepNum.Length - GetSweepCount());
if (GetSweepCount() == )
{
MessageBox.Show("过关");
}
}
else
{
btn.Content = btn.Tag;
}
}
btn.Click -= btnSweeps_Click;//让单击的按钮失效
BeginWa = false;//修改挖雷状态
}
/// <summary>
/// 刷新挖雷工具
/// </summary>
private void SetLgContent()
{
if (GNum > )
{
GNum--;
string tag = "工具:";
lg.Content = tag + GNum;//刷新挖雷次数
}
}
/// <summary>
/// 挖雷
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnWa_Click(object sender, RoutedEventArgs e)
{
if (!BeginWa)
{
Button btn = (e.Source as Button);
btn.Click -= btnSweeps_Click;//让单击的按钮失效
BeginWa = true;
SetLgContent();
}
}
/// <summary>
/// 游戏结束
/// </summary>
private void GameOver()
{
foreach (var c in canSweep.Children)
{
if (c is Button)
{
Button b = c as Button;
b.IsEnabled = false;
}
}
}
/// <summary>
/// 判断是否正确
/// </summary>
/// <param name="button">单击的Button控件</param>
/// <returns>是否可以继续游戏</returns>
private bool IsCorrect(Button button)
{
bool b = true;
//if(button.Content.ToString() == "★")
if (button.Tag.ToString() == "★")
{
b = false;
button.Content = button.Tag;
MessageBox.Show("GAME OVER");
GameOver();
}
return b;
}
/// <summary>
/// 找雷
/// </summary>
/// <param name="btn">单击的雷</param>
private void ReturnFindSweeps(Button btn)
{ if (btn.Tag.ToString() == "" || btn.Tag.ToString() == " ")//表示该区域为安全区域
{
double left = btn.Margin.Left - ;
double top = btn.Margin.Top - ;
double right = btn.Margin.Right + ;
double bottom = btn.Margin.Bottom + ;
foreach (Control c in canSweep.Children)
{
if (c is Button)
{
Button b = c as Button;
if (b.Margin.Left >= left && b.Margin.Top >= top && b.Margin.Right <= right && b.Margin.Bottom <= bottom)
{
//if (b.Content.ToString() != "")
if (b.Tag.ToString() != "")//表示附近无雷
{
if(b.Tag.ToString() == "")
b.Content = "";
else if(b.Tag.ToString() != "★")
b.Content = b.Tag;
continue;
}
else
{
b.Click -= btnSweeps_Click;//让按钮失效
b.Content = "";
b.Tag = " ";//表示已经侦查过的区域
//b.Style = new System.Windows.Style();//清除外部样式
b.Style = FindResource("btnClickIng") as Style;
ReturnFindSweeps(b);//递归调用
}
}
}
}
}
else//如果是雷所属的区域,则只显示该一块区域
{
//btn.Background = myBrush;
btn.Content = btn.Tag;
btn.Click -= btnSweeps_Click;//让按钮失效
}
}
}
}

样式

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Storyboard x:Key="btnFZs">
<PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" >
<EasingPointKeyFrame KeyTime="" Value="0.5,0.5"/>
</PointAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" >
<EasingDoubleKeyFrame KeyTime="" Value="-1">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="btns" BeginTime="0:0:1"> </Storyboard>
<!--表示资源-->
<Style TargetType="Button">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="RenderTransform">
<Setter.Value>
<!--实现对元素拉伸,旋转,扭曲等效果-->
<TransformGroup>
<!--能够让某对象的缩放、旋转、扭曲等变化效果合并起来使用-->
<ScaleTransform/>
<!--能够让某对象产生缩放变化-->
<SkewTransform/>
<!--能够让某对象产生扭曲变化-->
<RotateTransform/>
<!--能够让某对象产生旋转变化,根据中心点进行顺时针旋转或逆时针旋转-->
<TranslateTransform/>
<!--能够让某对象的缩放、旋转、扭曲等变化效果合并起来使用-->
<MatrixTransform/>
<!--能够让某对象通过矩阵算法实现更为复杂的变形-->
</TransformGroup>
</Setter.Value>
</Setter>
<!--设置属性-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<!--设置模版-->
<Border x:Name="back" Opacity="0.9" CornerRadius="">
<!--<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
-->
<!--渐变的范围-->
<!--
<GradientStop Color="Bisque" Offset=""/>
-->
<!--渐变对位置-->
<!--
<GradientStop Color="#1111" Offset="0.5"/>
<GradientStop Color="#1111" Offset=""/>
</LinearGradientBrush>
</Border.Background>-->
<!--如果要多次设置背景就要在次添加一个border-->
<Border x:Name="fore" BorderThickness="" CornerRadius="" BorderBrush="#5555">
<Border.Background>
<!--线性渐变画刷-->
<!--<LinearGradientBrush StartPoint="0,0.5" EndPoint="0.5,1">
<GradientStop Color="#6fff" Offset="0.5"/>
<GradientStop Color="#1111" Offset="0.9"/>
</LinearGradientBrush>-->
<!--<RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
<GradientStop Color="#1111" Offset="0.5"/>
<GradientStop Color="#6fff" Offset="0.4"/>
</RadialGradientBrush>-->
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<!-- 绘制矩形 -->
<GeometryDrawing.Geometry>
<RectangleGeometry RadiusX="0.02" RadiusY="0.5"
Rect="0.05,0.05,0.8,0.8" />
</GeometryDrawing.Geometry>
<!-- 矩形填充色 -->
<GeometryDrawing.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<!--<GradientStop Color="#1111" Offset="" />
<GradientStop Color="White" Offset="" />-->
</LinearGradientBrush>
</GeometryDrawing.Brush>
<!-- 矩形边框 -->
<GeometryDrawing.Pen>
<Pen Thickness="0.05">
<!--绘制的范围-->
<Pen.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#1111" Offset="" />
<GradientStop Color="#ffff" Offset="" />
</LinearGradientBrush>
</Pen.Brush>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Border.Background>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
<!--使用原来控件设置的属性内容-->
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="Purple"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="Button" x:Key="btnClickIng">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Opacity="0.9" CornerRadius="">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="Gray" Offset="0.5"/>
</LinearGradientBrush>
</Border.Background>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="Purple"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Canvas">
<Setter Property="Background">
<Setter.Value>
<RadialGradientBrush
GradientOrigin="0.5,0.5"
Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
<RadialGradientBrush.GradientStops>
<GradientStop Color="Tan" Offset="" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True"> </Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Storyboard x:Key="fanzhuan"><!--定义旋转功能-->
<PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="grid">
<EasingPointKeyFrame KeyTime="" Value="0.5,0.5"/>
</PointAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="grid">
<EasingDoubleKeyFrame KeyTime="" Value="-1">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="">
<EasingDoubleKeyFrame.EasingFunction>
<CubicEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Style TargetType="Grid">
<Setter Property="RenderTransform">
<Setter.Value>
<!--实现对元素拉伸,旋转,扭曲等效果-->
<TransformGroup>
<!--能够让某对象的缩放、旋转、扭曲等变化效果合并起来使用-->
<ScaleTransform/>
<!--能够让某对象产生缩放变化-->
<SkewTransform/>
<!--能够让某对象产生扭曲变化-->
<RotateTransform/>
<!--能够让某对象产生旋转变化,根据中心点进行顺时针旋转或逆时针旋转-->
<TranslateTransform/>
<!--能够让某对象的缩放、旋转、扭曲等变化效果合并起来使用-->
<MatrixTransform/>
<!--能够让某对象通过矩阵算法实现更为复杂的变形-->
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="Background">
<Setter.Value>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<!-- 绘制矩形 -->
<GeometryDrawing.Geometry>
<RectangleGeometry RadiusX="0.05" RadiusY=""
Rect="0,0,1,1" />
</GeometryDrawing.Geometry>
<!-- 矩形填充色 -->
<GeometryDrawing.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="BurlyWood" Offset="" />
<GradientStop Color="LemonChiffon" Offset="" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
<!-- 矩形边框 -->
<GeometryDrawing.Pen>
<Pen Thickness="0.05">
<!--绘制的范围-->
<Pen.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="Black" Offset="0.01" />
<GradientStop Color="Plum" Offset="0.8" />
</LinearGradientBrush>
</Pen.Brush>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Label">
<Setter Property="Background">
<Setter.Value>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<!-- 绘制矩形 -->
<GeometryDrawing.Geometry>
<RectangleGeometry RadiusX="0.1" RadiusY="0.07"
Rect="1,1,1,1" />
</GeometryDrawing.Geometry>
<!-- 矩形填充色 -->
<GeometryDrawing.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#1111" Offset="" />
<GradientStop Color="#ffff" Offset="0.1" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
<!-- 矩形边框 -->
<GeometryDrawing.Pen>
<Pen Thickness="0.05">
<!--绘制的范围-->
<Pen.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#1111" Offset="" />
<GradientStop Color="#ffff" Offset="0.5" />
</LinearGradientBrush>
</Pen.Brush>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="TextBox">
<Setter Property="Background">
<Setter.Value>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<!-- 绘制矩形 -->
<GeometryDrawing.Geometry>
<RectangleGeometry RadiusX="0.8" RadiusY=""
Rect="1,1,0.5,0.9" />
</GeometryDrawing.Geometry>
<!-- 矩形边框 -->
<GeometryDrawing.Pen>
<Pen Thickness="">
<!--绘制的范围-->
<Pen.Brush>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#1111" Offset="" />
</LinearGradientBrush>
</Pen.Brush>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

wpf版扫雷游戏的更多相关文章

  1. 基于C#—WPF的扫雷游戏

    自学教材:<C#入门经典(第六版)>,1月28日购入,1月29日到2月9日学习了前十六章,由于有C语言基础,在语法阶段学习起来比较轻松,不过在接触到面向对象的时候遇到了一些困难,对于一些概 ...

  2. Js 网页版扫雷游戏代码实现

    这个游戏是自己在大约一年前联系js熟练度时做的,用的都是基础的东西,最近比较忙没时间整理.直接发给大家,有兴趣的可以看一下.欢迎大家提出建议.如果你有什么新的想法也可以提出来,或者你并不擅长编程.你想 ...

  3. Weex 版扫雷游戏开发

    扫雷是一个喜闻乐见的小游戏,今天在看 Weex 文档的过程中,无意中发现用 Weex 完全可以开发一个扫雷出来.当然这个扫雷和 Windows 那个有一点差距,不过麻雀虽小五脏俱全,随机布雷.自动挖雷 ...

  4. Javascript版经典游戏之《扫雷》

    翻出年初写的游戏贴上来,扫雷相信大家都玩过,先上图: 源码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  5. web版扫雷小游戏(三)

    ~~~接上篇,上篇介绍了游戏实现过程中第一个比较繁琐的地方,现在展现在玩家面前的是一个有血有肉的棋盘,从某种意义上说玩家已经可以开始游戏了,但是不够人性化,玩家只能一个一个节点的点开,然后判断,然后标 ...

  6. web版扫雷小游戏(二)

    接上篇~~第一次写这种技术博客,发现把自己做的东西介绍出来还是一件脑力活,不是那么轻松啊,好吧,想到哪写到哪,流水记录之,待完成之后再根据大家的意见进行修改吧. 游戏实现 根据对扫雷游戏的体验和分析, ...

  7. web版扫雷小游戏(一)

    作为一名程序猿,平时的爱好也不多,说起游戏,我不太喜欢大型的网游,因为太耗时间,偶尔玩玩经典的单机小游戏,比如windows下自带的游戏扫雷(秀一下,高级下最高纪录110s). 现阶段正在致力于web ...

  8. Java版的扫雷游戏源码

    package com.xz.sl; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; i ...

  9. C+命令行+方向键=简易版扫雷

    前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什 ...

随机推荐

  1. 第14章 Linux启动管理(3)_系统修复模式

    3. 系统修复模式 3.1 单用户模式 (1)在grub界面中选择第2项,并按"e键"进入编辑.并在"-quiet"后面加入" 1",即&q ...

  2. js分页页码算法

    function get_hs_page(cur_page, total_page) { var result = ""; ; i <= total_page; i++) { ...

  3. CYQ.Data V5 分布式自动化缓存设计介绍

    前方: 其实完成这个功能之前,我就在思考:是先把想法写了来,和大伙讨论讨论后再实现,还是实现后再写文论述自己的思维. 忽然脑后传来一个声音说:你发文后会进入发呆阶段. 所以还是静下心,让我轻轻地把代码 ...

  4. Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...

  5. Hadoop1 Centos伪分布式部署

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  6. 前端构建大法 Gulp 系列 (四):gulp实战

    前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...

  7. Hbase学习笔记01

    最近做项目接触到了HDFS.mapreduce以及Hbase,有了实战机会,今天打算将这些知识好好总结下,以备不时之需.首先从Hbase开始吧. Hbase是建立在HDFS上的分布式数据库,下图是Hb ...

  8. Javascript之函数模型

    分析: 对于js自定义函数,函数体的内容大致可抽象为:变量(局部变量,由var关键字定义,全局变量)和函数(一般函数,匿名函数,闭包函数). function SelfDefineFunc() { v ...

  9. jQuery选择器中,通配符[id^='code']input[id$='code'][id*='code']

     1.选择器 (1)通配符: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']&qu ...

  10. innerHTML和innerText的区别

    以<p id="example">welcome to <strong>JavaScript</strong> !!!</p>为例: ...