学海无涯

导航

Windows and Dialogs 窗口和对话框

无边框,无外壳,且不能改变大小的窗口:

 WindowStyle="None" ResizeMode="NoResize"

窗口生命周期:

  

  Activated

当窗口被激活(例如,单击)时引发。如果窗口从未被激活,您将不会获得此事件(或相应的
Deactivated事件)。
Closing
当窗口试图自行关闭时引发。您可以通过将CancelEventArgs参数的Cancel属性设置为  true  
来取消它。

窗口位置和大小

您可以使用Top和Left属性管理窗口的x和y位置,而您可以使用TopMost属性影响  Z  顺序。在整个
桌面上,所有TopMost属性设置为  true  的窗口都显示在所有TopMost属性设置为  false  的窗口之
上,尽管窗口在其层中的  Z  顺序由用户交互决定。例如,单击一个非最顶层窗口会将其带到非最顶层
窗口的顶部,但不会将其带到任何最顶层窗口的前面。
如果您想手动设置窗口的启动位置,可以通过在显示窗口之前设置Top和Left属性来实现。但是,如
果您只想让窗口在屏幕或所有者上居中,则可以在显示窗口之前根据需要将WindowStartupLocation属性设置为CenterScreen或CenterOwner  :
Window1 window = new Window1( );
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.Show( ); // wil
如果您不更改WindowStartupLocation,则默认为手动。  Manual允许您通过设置Top和Left来确定初始位置
您可以在Initialized事件之后(而不是期间)从Window类的ActualWidth和ActualHeight属性关系中获取窗口的大小(例如,  Loaded是获取它们的好地方)
如果您不想手动调整窗口大小,而是希望窗口的大小最初由内容的大小控制,您可以将SizeToContent属性从默认的SizeToContent枚举值Manual更改为其他三个值之一枚举值:  
Width、  Height或WidthAndHeight。如果内容大小超出一个或两个维度的最小/最大界限,则最小/最大界限仍将得到遵守。同样,如果Width或Height是手动设置的,则SizeToContent设置将被忽略。
SizeToContent="Width" //窗口宽根据内容自动生成

默认情况下,所有窗口都是可调整大小的;但是,您可以通过使用ResizeMode枚举中的值之一设置ResizeMode属性来更改行为:  NoResize、  CanMinimize、  CanResize或CanResizeWithGrip,

 Window Owners 窗口所有者

 在实践中,自有窗口的主要视觉用途是创建浮动工具窗口或无模式对话框(即,具

有与自有窗口共享的最小化和恢复行为的东西)。

Window Visibility and State  窗口可见性和状态

Visibility属性控制窗口的可见性,该属性具有来自Visibility枚举的以下值:  Visible、  Hidden和Collapsed。  ( Window类将Hidden和Collapsed视为相同。)您还可以
使用Show和Hide方法。除了停止呈现窗口外,  Hide方法还将其从任务栏中取出(假设首先设置了ShowInTaskbar属性)。
如果您想隐藏窗口但将其留在任务栏中,您可以将WindowState属性设置为WindowState枚举值Minimized。要恢复它或使其占据整个桌面(减去任务栏和边栏),您可以使用正常或最大化。
 RestoreBounds仅在窗口处于Normal状态时移动或调整大小时才会更改。这使得RestoreBounds成为一个方便的属性,可以保留在用户设置中以恢复窗口
保存和恢复窗口状态:
public partial class MainWindow : System.Windows.Window {
 public MainWindow( ) {
 InitializeComponent( );
 try {
 // Restore state from user settings
 Rect restoreBounds = Properties.Settings.Default.MainRestoreBounds;
 WindowState = WindowState.Normal;
 Left = restoreBounds.Left;
 Top = restoreBounds.Top;
 Width = restoreBounds.Width;
 Height = restoreBounds.Height;
 WindowState = Properties.Settings.Default.MainWindowState;
 }
 catch { }
 // Watch for main window to close
 Closing += window_Closing;
 }

  

 // Save state as window closes
 void window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
 Properties.Settings.Default.MainRestoreBounds = RestoreBounds;
 Properties.Settings.Default.MainWindowState = WindowState;
 Properties.Settings.Default.Save();
 }

Dialogs 对话框

Common Dialogs 通用对话框
 WPF  有三个通用对话框 :OpenFileDialog, SaveFileDialog, PrintDialog
注意: 与  Windows  窗体提供的常见对话框不同,WPF  ShowDialog返回一个可为  null  的布尔值,而不是枚举值。
 private void openFileDialog_Click(object sender, RoutedEventArgs e)
        {//文件对话框
            OpenFileDialog dlg= new OpenFileDialog();
            dlg.FileName=filename;
            if(dlg.ShowDialog()==true)
            {
                filename=dlg.FileName;
            }
        }

        private void folderBrowserDialog_Click(object sender, RoutedEventArgs e)
        {//文件夹对话框
            System.Windows.Forms.FolderBrowserDialog dlg =
new System.Windows.Forms.FolderBrowserDialog();
            dlg.SelectedPath = folder;
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                folder = dlg.SelectedPath;
                // do something with the fold

            }
        }

  

可用的通用对话框
下面是  WPF  和  Windows  组合提供的常见对话框列表:

它们中的大多数都按照您期望的方式工作,因为它们处理的类型可以在  Windows  Forms  或  WPF  中轻松使用(例如,包含文件夹名称或文件名的字符串在两者中都同样有效)。另一方面,它们中的

三个(ColorDialog、  FontDialog和PrintPreviewDialog)在  WPF  中根本不能很好地工作。

Custom Dialogs 自定义对话框

 关于构建模式对话框,我们所做的唯一一件事就是设置

 
<Window ...
 WindowStartupLocation="CenterOwner">

 模式对话框

 对话框需要具备一些基本的功能如下:

  • 初始焦点设置在正确的元素上。
FocusManager.FocusedElement="{Binding ElementName=reportFolderTextBox}"
  • 对话框不显示在任务栏中。 
ShowInTaskbar="False"
  •  数据传入和传出对话框。 
  • OK  按钮显示为默认按钮(并在按  Enter键被按下)。 
  • 当按下Esc  键时取消被激活。 
  •  在点击“OK”按钮时验证输入的数据。

 

public class RegexValidation : ValidationRule
   {//正则表达式验证
       public override ValidationResult Validate(object value, CultureInfo cultureInfo)
       {
           Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
           Match match = regex.Match(value.ToString());
           if (match == null || match == Match.Empty)
           {
               return new ValidationResult(false, "Please enter valid email");
           }
           else
           {
               return ValidationResult.ValidResult;
           }
       }
   }

  

 

 

 
 
 
 
 
 
 

 

 

posted on 2023-01-15 11:05  宁静致远.  阅读(122)  评论(0编辑  收藏  举报