WPF组件使用(Button)

上篇介绍了创建WPF项目以及修改Button显示文本的方法 :创建WPF项目,这篇继续分享Button按钮的使用

目录

一  简单按钮的使用

二  代码中动态注册

三  动态生成按钮

三 带图片的按钮

四 WPF中使用winform Button组件

五 RadioButton

六  代码整理

结语


一  简单按钮的使用

 WPF 窗口视图xmal 中绑定Button事件,双击按钮会在后台代码中自动生成按钮的Click事件:

  <Button Content="Simple Button" HorizontalAlignment="Left" Margin="508,82,0,0" VerticalAlignment="Top" Width="109" Name="MySimpleButton" Click="SimpleButton"/>
        /// <summary>
        /// 简单按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SimpleButton(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("简单按钮使用");
        }

二  代码中动态注册

简单按钮处理通过添加Click事件可以达到需求,而如果想要在代码中动态注册也是可以的:

设置Button组件的Name属性,设置BorderBrush,FontWeight等属性可改变 Button 控件文本格式。

<Button Content="Simple Button" Background ="BurlyWood" BorderBrush="Red" Foreground="Blue" FontWeight= "DemiBold" Margin="508,82,0,0" VerticalAlignment="Top" Width="109" Name="MySimpleButton" Click="SimpleButton" />

后台代码中通过当前组件的名称Name属性,对该组件进行事件注册。   我们通过MessageBox弹窗来检测按钮事件是否正常触发。

        public MainWindow()
        {
            InitializeComponent();
            Init();
        }

        void Init()
        {
            MyAutoRegistButton.Click += new RoutedEventHandler(ButtonRegistrationEvent);
        }

        /// <summary>
        /// 代码注册事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonRegistrationEvent(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("代码注册事件 按钮使用");
        }

三  动态生成按钮

如果想动态生成按钮,也是可以的。添加Window_Loaded,在窗口加载完成时调用Window_Loaded,在后台控制添加函数实现按钮的动态生成。

实例化一个按钮组件,可以设置该组件的各种属性,注册按钮事件,然后将新生成的组件添加到所需Canvas中。

        /// <summary>
        /// 生成按钮:窗体加载时完成生成按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Button createBtn = new Button
            {
                Name = "CreateButton",
                Content = "CreateButton",
                Height = 40,
                Width = 80,
                HorizontalAlignment = HorizontalAlignment.Left,
                Margin = new Thickness(20, 20, 20, 20),
                VerticalAlignment = VerticalAlignment.Top,
                Visibility = Visibility.Visible,
            };

            createBtn.Click += new RoutedEventHandler(CreateButtonOnClick);
            MyCanvas.Children.Add(createBtn);
        }

三 带图片的按钮

添加图片的按钮在日常中是常见的需求,随便找一个icon图标放置在项目中路径:ImgSource/icon1.png

在button组件的属性中设置Source属性,路径设置为项目中放置图标的路径,格式化属性。

       <Button Click="IconClick" Margin="574,24,25.333,275.667">
            <Button.Template>
                <ControlTemplate>
                    <Grid>
                        <Image Margin="2" Source="ImgSource/icon1.png" Height="60" Width="60"/>
                        <TextBlock Foreground="Blue" Background="BlanchedAlmond" FontStyle="Italic" HorizontalAlignment ="Center" VerticalAlignment="Bottom">测试按钮</TextBlock>
                    </Grid>
                </ControlTemplate>
            </Button.Template>
        </Button>

四 WPF中使用winform Button组件

WPF从winform中衍生出来,并且加入了很多新的思想。如果想在WPF使用winfrom的组件改如何使用呢,接下来使用最简单的Button组件来展示

在WPF中引用Winform控件:

1 添加引用:首先需要添加两个DLL的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll。VS2019版本如果已经按照了.NETFramework 4.7.2,默认存放的位置如下:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Windows.Forms.dll

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\WindowsFormsIntegration.dll

2 WPF窗口视图 Xaml 中添加winform引用

   xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

3  在WPF中使用winform组件需要加上WinForm控件的宿主容器 "WindowsFormsHost",用来设置属性来调整大小和布局。而设置组件属性需加入命名前缀

    <StackPanel Margin="462,150,0,0">
            <WindowsFormsHost Margin="120,30,10,0" Height="111" Background="CadetBlue">
                <forms:Button x:Name="WindowsFormsButton" Text="按钮" Click="WindowsFormsButtonClick"/>
            </WindowsFormsHost>
    </StackPanel>

五 RadioButton使用

 RadioButton组件分为选中和非选中状态

如果界面上出现多个Radiobutton组件且所属同一个Grid里面,系统会认为所有的Radiobutton中GroupName相同的是同一组,同组中只会同时存在一个单选框。

        <Canvas Margin="0,190,430,0">
            <RadioButton Name="RadBtn1" Margin="50,0,0,0" GroupName="Group1" Background="Yellow" Foreground="Brown" Click="RadBtnOnChecked">牛奶</RadioButton>
            <RadioButton Name="RadBtn2" Margin="50,50,0,0" GroupName="Group1" Background="Yellow" Foreground="Blue">啤酒</RadioButton>
            <RadioButton Name="RadBtn3" Margin="50,100,0,0" GroupName="Group1" Background="Yellow" Foreground="Orange">可乐</RadioButton>
            <RadioButton Name="RadBtn4" Margin="50,150,0,0" GroupName="Group2" Background="Yellow" Foreground="Green">米饭</RadioButton>
            <RadioButton Name="RadBtn5" Margin="50,200,0,0" GroupName="Group2" Background="Yellow" Foreground="Purple">面条</RadioButton>
        </Canvas>

如图所示,将RadioButton按钮分为两组,按钮触发状态也是两组,根据所需设置Group数量。

同样按钮点击事件和Button组件类似。

        private void RadBtnOnChecked(object sender, RoutedEventArgs e)
        {
            //RadBtn1.Foreground = Brushes.Blue;
            //RadBtn1.Background = Brushes.Yellow;
            MessageBox.Show(" RadBtnOnChecked 按钮点击");
        }

六  代码整理

前后台完整代码放在这里,方便大家观看

<Window x:Class="ButtonWPF.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:ButtonWPF"
        xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">

    <Grid>
        <Canvas Name="MyCanvas" Margin="0,57,0,0">
            <Button Content="AutoRegistButton" HorizontalAlignment="Left" VerticalAlignment="Top" Width="131" Name="MyAutoRegistButton" Canvas.Left="377" Canvas.Top="-20" Height="30"/>
            <Button Content="Simple Button" Background ="BlanchedAlmond" BorderBrush="Red" Foreground="Blue" FontWeight= "DemiBold" VerticalAlignment="Top" Width="131" Name="MySimpleButton" Click="SimpleButton" Canvas.Left="377" Canvas.Top="44" Height="30" />
        </Canvas>

        <Canvas Margin="0,190,430,0">
            <RadioButton Name="RadBtn1" Margin="50,0,0,0" GroupName="Group1" Background="Yellow" Foreground="Brown" Click="RadBtnOnChecked">牛奶</RadioButton>
            <RadioButton Name="RadBtn2" Margin="50,50,0,0" GroupName="Group1" Background="Yellow" Foreground="Blue">啤酒</RadioButton>
            <RadioButton Name="RadBtn3" Margin="50,100,0,0" GroupName="Group1" Background="Yellow" Foreground="Orange">可乐</RadioButton>
            <RadioButton Name="RadBtn4" Margin="50,150,0,0" GroupName="Group2" Background="Yellow" Foreground="Green">米饭</RadioButton>
            <RadioButton Name="RadBtn5" Margin="50,200,0,0" GroupName="Group2" Background="Yellow" Foreground="Purple">面条</RadioButton>
        </Canvas>

        <Button Click="IconClick" Margin="574,24,25.333,275.667">
            <Button.Template>
                <ControlTemplate>
                    <Grid>
                        <Image Margin="2" Source="ImgSource/icon1.png" Height="60" Width="60"/>
                        <TextBlock Foreground="Blue" Background="BlanchedAlmond" FontStyle="Italic" HorizontalAlignment ="Center" VerticalAlignment="Bottom">测试按钮</TextBlock>
                    </Grid>
                </ControlTemplate>
            </Button.Template>
        </Button>

        <StackPanel Margin="462,150,0,0">
            <WindowsFormsHost Margin="120,30,10,0" Height="111" Background="BlanchedAlmond">
                <forms:Button x:Name="WindowsFormsButton" Text="WindowsButton" Click="WindowsFormsButtonClick"/>
            </WindowsFormsHost>
        </StackPanel>
    </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.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WindowsForms = System.Windows.Forms;

namespace ButtonWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Init();
        }

        void Init()
        {
            MyAutoRegistButton.Click += new RoutedEventHandler(ButtonRegistrationEvent);

            
        }

        /// <summary>
        /// 生成按钮:窗体加载时完成生成按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Button createBtn = new Button
            {
                Name = "CreateButton",
                Content = "CreateButton",
                Height = 40,
                Width = 80,
                HorizontalAlignment = HorizontalAlignment.Left,
                Margin = new Thickness(20, 20, 20, 20),
                VerticalAlignment = VerticalAlignment.Top,
                Visibility = Visibility.Visible,
            };

            createBtn.Click += new RoutedEventHandler(CreateButtonOnClick);
            MyCanvas.Children.Add(createBtn);
        }

        private void CreateButtonOnClick(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("CreateButtonOnClick 按钮点击");
        }

        /// <summary>
        /// 代码注册事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonRegistrationEvent (object sender, RoutedEventArgs e)
        {
            MessageBox.Show("代码注册事件 按钮使用");
        }

        /// <summary>
        /// 简单按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SimpleButton(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("简单按钮使用");
        }

        /// <summary>
        /// 带图标的按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void IconClick(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("图标使用");
        }

        /// <summary>
        /// 引用winform按钮组件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WindowsFormsButtonClick(object sender, EventArgs e)
        {
            MessageBox.Show(" WindowsForm 按钮点击");
        }

        private void RadBtnOnChecked(object sender, RoutedEventArgs e)
        {
            //RadBtn1.Foreground = Brushes.Blue;
            //RadBtn1.Background = Brushes.Yellow;
            MessageBox.Show(" RadBtnOnChecked 按钮点击");
        }
    }
}

项目配置如图:


结语

将WPF中按钮相关的简单使用整理了一下,希望对大家有所帮助。

主要组件的简单使用做介绍,后续有机会继续完善和介绍复杂状态下的使用。

按钮配色以及布局就比较随意了,程序猿的审美,求轻喷。

这里把相关的代码链接放在这里:WPF学习整理

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stupid_kidofObj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值