凡科快速建站,wordpress社交分享,杭州拱墅区网站建设,简述网络营销的概念微信公众号#xff1a;Dotnet9#xff0c;网站#xff1a;Dotnet9#xff0c;问题或建议#xff0c;请网站留言#xff1b; 如果您觉得Dotnet9对您有帮助#xff0c;欢迎赞赏Dotnet9.com内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果未做修改的表单展示 … 微信公众号Dotnet9网站Dotnet9问题或建议请网站留言 如果您觉得Dotnet9对您有帮助欢迎赞赏Dotnet9.com内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果未做修改的表单展示 表单变化关闭窗体提示 来个Gif动态操作看看 2.业务场景表单修改后关闭窗体前检查提示3.编码实现3.1 添加Nuget库使用 .Net Core 3.1 创建名为“ValidateDataChange”的WPF解决方案添加两个Nuget库MaterialDesignThemes和MaterialDesignColors。MaterialDesign控件库 3.2 工程结构4个文件变动App.xaml添加MD控件样式MainWindow.xaml主窗口实现效果MainWindow.xaml.cs主窗口后台绑定及关闭验证Contact.cs绑定的实体3.3 App.xaml引入MD控件样式Application x:ClassValidateDataChange.Appxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:localclr-namespace:ValidateDataChangeStartupUriMainWindow.xamlApplication.ResourcesResourceDictionaryResourceDictionary.MergedDictionariesResourceDictionary Sourcepack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml/ResourceDictionary Sourcepack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml/ResourceDictionary Sourcepack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml/ResourceDictionary Sourcepack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Blue.xaml//ResourceDictionary.MergedDictionaries/ResourceDictionary/Application.Resources
/Application3.4 主窗体 MainWindow.xaml表单展示使用MD控件的Snackbar作为消息提示Window x:ClassValidateDataChange.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:ValidateDataChangemc:Ignorabledxmlns:materialDesignhttp://materialdesigninxaml.net/winfx/xaml/themesTitle编辑联系人 Height500 Width400 ResizeModeNoResize FontFamilyRoboto FontSize14 WindowStartupLocationCenterScreen ClosingWindow_ClosingGridGrid.RowDefinitionsRowDefinition Height100/RowDefinition Height*//Grid.RowDefinitionsmaterialDesign:ColorZone ModePrimaryMid Grid.Row0 VerticalAlignmentStretchTextBlock Text联系人 VerticalAlignmentCenter Margin20 FontSize30//materialDesign:ColorZoneStackPanel Margin10 30 Grid.Row1GridmaterialDesign:PackIcon KindFace VerticalAlignmentBottom Margin2 12 Foreground{Binding BorderBrush, ElementNameTextBoxName}/TextBox x:NameTextBoxName Margin5 materialDesign:HintAssist.Hint名字 Padding8 0 0 0 Text{Binding Name}Style{StaticResource MaterialDesignFloatingHintTextBox}//GridGridmaterialDesign:PackIcon KindAt VerticalAlignmentBottom Margin2 12 Foreground{Binding BorderBrush, ElementNameTextBoxEmail}/TextBox x:NameTextBoxEmail Margin5 materialDesign:HintAssist.Hint邮件 Padding8 0 0 0 Text{Binding Email}Style{StaticResource MaterialDesignFloatingHintTextBox}//GridGridStackPanel OrientationHorizontal VerticalAlignmentBottom Margin2 10materialDesign:PackIcon KindFacebook Foreground{Binding BorderBrush, ElementNameTextBoxFacebook}/TextBlock Textfacebook.com/ Foreground{Binding BorderBrush, ElementNameTextBoxFacebook}//StackPanelTextBox x:NameTextBoxFacebook Margin5 materialDesign:HintAssist.HintFacebook Padding54 0 0 0 Text{Binding Facebook}Style{StaticResource MaterialDesignFloatingHintTextBox}//Grid/StackPanelButton Grid.RowSpan2 Margin50 72 HorizontalAlignmentRight VerticalAlignmentTop Style{StaticResource MaterialDesignFloatingActionAccentButton}ClickButton_ClickmaterialDesign:PackIcon KindContentSave//ButtonmaterialDesign:Snackbar Grid.Row1 HorizontalAlignmentStretch x:NameSnackbarUnsavedChanges VerticalAlignmentBottommaterialDesign:SnackbarMessageContent有未保存的更改是否放弃修改ActionContent放弃 ActionClickSnackbarMessage_ActionClick//materialDesign:Snackbar/Grid
/Window3.5 MainWindow.xaml.cs数据绑定窗体关闭前表单验证简单使用hashcode判断绑定实体是否有变化。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;namespace ValidateDataChange
{/// summary/// Interaction logic for MainWindow.xaml/// /summarypublic partial class MainWindow : Window{int hash;bool discardChanges;public MainWindow(){InitializeComponent();discardChanges false;var contact new Contact(Dotnet9, 632871194qq.com, Dotnet9);hash contact.GetHashCode();this.DataContext contact;}private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e){if (this.DataContext.GetHashCode() ! hash !discardChanges){SnackbarUnsavedChanges.IsActive true;e.Cancel true;}}private void Button_Click(object sender, RoutedEventArgs e){//保存数据}private void SnackbarMessage_ActionClick(object sender, RoutedEventArgs e){SnackbarUnsavedChanges.IsActive false;discardChanges true;this.Close();}}
}3.6 Contact.cs联系人实体类using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;namespace ValidateDataChange
{internal class Contact : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;private void NotifyPropertyChanged(string info){if (PropertyChanged ! null){PropertyChanged(this, new PropertyChangedEventArgs(info));}}private string name;public string Name{get { return name; }set { name value; NotifyPropertyChanged(Name); }}private string email;public string Email{get { return email; }set { email value; NotifyPropertyChanged(Email); }}private string facebook;public string Facebook{get { return facebook; }set { facebook value; NotifyPropertyChanged(Facebook); }}public Contact(string name, string email, string facebook){this.name name;this.email email;this.facebook facebook;}public override int GetHashCode(){return (name email facebook).GetHashCode();}}
}4.本文参考Design com WPF 大神的学习视频Validate Data Change开源控件库MaterialDesignInXamlToolkit本站对MD开源控件库的介绍控件介绍5.代码下载Github源码下载下载除非注明文章均由 Dotnet9 整理发布欢迎转载。转载请注明本文地址https://dotnet9.com/6823.html欢迎扫描下方二维码关注 Dotnet9 的微信公众号本站会及时推送最新技术文章