最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF自定義控件的實(shí)現(xiàn)

 更新時(shí)間:2023年03月03日 09:11:54   作者:weixin_59803084  
本文主要介紹了WPF自定義控件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

方式一:基于現(xiàn)有控件進(jìn)行擴(kuò)展,如基于button進(jìn)行擴(kuò)展,UI可直接用xmal進(jìn)行編輯設(shè)計(jì),邏輯用xaml.cs進(jìn)行編輯

方法二:直接創(chuàng)建wpf自定義控件

本文用方法二開展自定義控件!?。?/p>

1.自定義控件的內(nèi)容在代碼cs文件中,自定義控件繼承自Control,ui界面可在Genric.xaml中定義。

2.在Generic.xaml中定義控件界面

  <Style  TargetType="{x:Type ctrl:DevButton}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ctrl:DevButton}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">                       
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.1*" MaxWidth="5"/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>
                                //自定義控件中的組成 ,需要定義x:name,后臺(tái)代碼需要用到,button中的DevName是后臺(tái)cs中定義的依賴屬性
                                <Rectangle Margin="1" x:Name="statusLed"/>
                                <Button Grid.Column="1" x:Name="devBtn" Content="{TemplateBinding DevName}"/>
                            </Grid>
                        
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

 上述界面中定義了兩個(gè)控件,組成本自定義控件的外觀顯示。一個(gè)rectangle,用顏色對(duì)狀態(tài)進(jìn)行顯示,一個(gè)button,是本自定義控件的主要內(nèi)容,需要顯示設(shè)備名稱,Click事件/Command需要觸發(fā)任務(wù)。

3.后臺(tái)處理

3.1  定義自定義屬性DevName

        public string DevName
        {
            get { return (string)GetValue(DevNameProperty); }
            set { SetValue(DevNameProperty, value); }
        }
        public static readonly DependencyProperty DevNameProperty =
        DependencyProperty.Register("DevName", typeof(string), typeof(DevButton), new FrameworkPropertyMetadata("", new PropertyChangedCallback(OnDevNameChanged)));
        private static void OnDevNameChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            DevButton ctrl =sender as DevButton;
            ctrl.DevName = e.NewValue.ToString();           
        }

3.2  定義與前端界面UI元素對(duì)應(yīng)的信息

        private Rectangle statusLed;
        private Button devBtn;
        public override void OnApplyTemplate()
        {
            //備用方法 Template.FindName(DownButtonKey, this) as Button;
            statusLed = GetTemplateChild("statusLed") as Rectangle;
            devBtn = GetTemplateChild("devBtn") as Button;
            devBtn.Click += DevBtn_Click;
            base.OnApplyTemplate();                  
        }

依據(jù)控件名稱查找模板中的控件,并注冊(cè)button的click事件

3.3  定義事件

       private void DevBtn_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(DevName);
        }

自定義控件主要就是上述幾步??傮w代碼如下:

using System;
using System.Collections.Generic;
using System.Globalization;
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;
 
namespace WpfApp2
{
    /// <summary>
    /// Author:yut 2022-12-21
    /// Function:自定義控件,用于設(shè)備的啟停控制,同時(shí)顯示設(shè)備的運(yùn)行狀態(tài)
    /// <summary>
    public class DevButton : Control
    {        
     
        public DevButton()
        {
            SetCurrentValue(WidthProperty, 100d);
            SetCurrentValue(HeightProperty, 25d);
            SetCurrentValue(BackgroundProperty, Brushes.Yellow);            
        }
        static DevButton()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(DevButton), new FrameworkPropertyMetadata(typeof(DevButton)));
        } 
        private Rectangle statusLed;
        private Button devBtn;
        public override void OnApplyTemplate()
        {            
            statusLed = GetTemplateChild("statusLed") as Rectangle;
            devBtn = GetTemplateChild("devBtn") as Button;
            devBtn.Click += DevBtn_Click;
            base.OnApplyTemplate();                  
        }
 
        #region 自定義屬性
        public int DevId
        {
            get { return (int)GetValue(DevIdProperty); }
            set { SetValue(DevIdProperty, value); }
        }
        public static readonly DependencyProperty DevIdProperty =
          DependencyProperty.Register("DevId", typeof(int), typeof(DevButton), new FrameworkPropertyMetadata(-1,new PropertyChangedCallback(OnDevIdChanged)));
        private static void OnDevIdChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            DevButton ctrl = (DevButton)sender;
            ctrl.DevId = (int)e.NewValue;
        }
 
        public string DevName
        {
            get { return (string)GetValue(DevNameProperty); }
            set { SetValue(DevNameProperty, value); }
        }
        public static readonly DependencyProperty DevNameProperty =
        DependencyProperty.Register("DevName", typeof(string), typeof(DevButton), new FrameworkPropertyMetadata("", new PropertyChangedCallback(OnDevNameChanged)));
        private static void OnDevNameChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            DevButton ctrl =sender as DevButton;
            ctrl.DevName = e.NewValue.ToString();           
        }
 
        public int DevStatus
        {
            get { return (int)GetValue(DevStatusProperty); }
            set
            {
                SetValue(DevStatusProperty, value);              
            }
        }
        public static readonly DependencyProperty DevStatusProperty =
          DependencyProperty.Register("DevStatus", typeof(int), typeof(DevButton), new FrameworkPropertyMetadata(-1,new PropertyChangedCallback(OnDevStatusChanged)));
        private static void OnDevStatusChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            DevButton ctrl = (DevButton)sender;
            ctrl.DevStatus = (int)e.NewValue; 
            ctrl.StatusBrush=(ctrl.DevStatus>0)?Brushes.Green:Brushes.LightGray;
        }
 
        public Brush StatusBrush
        {
            get { return (Brush)GetValue(StatusBrushProperty); }
            set
            {
                SetValue(StatusBrushProperty, value);
            }
        }
        public static readonly DependencyProperty StatusBrushProperty =
        DependencyProperty.Register("StatusBrush", typeof(Brush), typeof(DevButton), new FrameworkPropertyMetadata(Brushes.LightGray));
 
        #endregion
 
 
        private void DevBtn_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(DevName);          
         
        }
 
    }
}
<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ctrl="clr-namespace:WpfApp2">
 
 
 
    <Style  TargetType="{x:Type ctrl:DevButton}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ctrl:DevButton}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                       
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.1*" MaxWidth="5"/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>
                            <!--Fill="{TemplateBinding DevStatus, Converter={StaticResource IntToBrushes}}"-->
                            <Rectangle Margin="1" x:Name="statusLed" Fill="{TemplateBinding StatusBrush}"/>
                                <Button Grid.Column="1" x:Name="devBtn" Content="{TemplateBinding DevName}"/>
                            </Grid>
                        
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
<Window x:Class="WpfApp2.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:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <StackPanel>
            <TextBlock Text="******************"/>
            <local:DevButton DevName="電機(jī)" DevStatus="2"/>
            <TextBlock Text="******************"/>
        </StackPanel>
    </Grid>
</Window>

運(yùn)行效果如下:

到此這篇關(guān)于WPF自定義控件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)WPF自定義控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# Winform實(shí)現(xiàn)圓角無鋸齒按鈕

    C# Winform實(shí)現(xiàn)圓角無鋸齒按鈕

    這篇文章主要為大家詳細(xì)介紹了C# Winform實(shí)現(xiàn)圓角無鋸齒按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • c#中文轉(zhuǎn)unicode字符示例分享

    c#中文轉(zhuǎn)unicode字符示例分享

    本文介紹了中文轉(zhuǎn)unicode字符的方法,還有UNICODE字符轉(zhuǎn)為中文的方法,大家參考使用吧
    2014-01-01
  • C# Memcached緩存用法實(shí)例詳解

    C# Memcached緩存用法實(shí)例詳解

    這篇文章主要介紹了C#中Memcached緩存用法,以實(shí)例形式詳細(xì)講述了在C#中針對(duì)Memcached緩存的各種操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#獲取應(yīng)用程序路徑或Web頁面目錄路徑

    C#獲取應(yīng)用程序路徑或Web頁面目錄路徑

    這篇文章介紹了C#獲取應(yīng)用程序路徑或Web頁面目錄路徑的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#數(shù)據(jù)導(dǎo)入到EXCEL的方法

    C#數(shù)據(jù)導(dǎo)入到EXCEL的方法

    今天小編就為大家分享一篇關(guān)于C#數(shù)據(jù)導(dǎo)入到EXCEL的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C#中async/await之線程上下文工作原理

    C#中async/await之線程上下文工作原理

    這篇文章主要為大家介紹了C#中async/await之線程上下文工作原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-05-05
  • C#?wpf?Bitmap轉(zhuǎn)換成WriteableBitmap的方法

    C#?wpf?Bitmap轉(zhuǎn)換成WriteableBitmap的方法

    本文主要介紹了C#?wpf?Bitmap轉(zhuǎn)換成WriteableBitmap的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C#使用XSLT實(shí)現(xiàn)xsl、xml與html相互轉(zhuǎn)換

    C#使用XSLT實(shí)現(xiàn)xsl、xml與html相互轉(zhuǎn)換

    這篇文章介紹了C#使用XSLT實(shí)現(xiàn)xsl、xml與html相互轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c# 垃圾回收(GC)優(yōu)化

    c# 垃圾回收(GC)優(yōu)化

    這篇文章主要介紹了c# 垃圾回收(GC)優(yōu)化的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2021-02-02
  • WPF自定義控件實(shí)現(xiàn)ItemsControl魚眼效果

    WPF自定義控件實(shí)現(xiàn)ItemsControl魚眼效果

    這篇文章主要為大家詳細(xì)介紹了WPF如何通過自定義控件實(shí)現(xiàn)ItemsControl魚眼效果,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2024-01-01

最新評(píng)論

阿克陶县| 永善县| 石台县| 丰台区| 清水河县| 明光市| 博客| 崇文区| 昂仁县| 柳江县| 平和县| 苍南县| 扎鲁特旗| 元朗区| 涞源县| 清水河县| 乌鲁木齐县| 晴隆县| 莱州市| 汾阳市| 京山县| 稷山县| 长寿区| 板桥市| 柳江县| 正定县| 宿迁市| 达州市| 金塔县| 鱼台县| 清水县| 上高县| 中宁县| 容城县| 抚顺市| 海门市| 淅川县| 金堂县| 镇原县| 澳门| 宕昌县|