WPF 日常开发用到的知识点(一)

本章记录自己在日常使用WPF开发软件过程中使用到的一些知识点,做个记录防止自己以后忘记;

1、在改写模板时候,发现边框设置1个像素,但是运行效果显示的不是1个像素并且很模糊;

    解决方法:开启像素对齐,设置属性SnapsToDevicePixels="True"

2、绘制线条可以使用Rextangle, 也可以用分割线

3、使Button响应键盘回车键,只要把属性(IsDefault)设置为True,即可;如果是其他键符,可以在KeyDown和KeyUp事件中激活;

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
   if(e.KeyStates == Keyboard.GetKeyStates(Key.D8) && Keyboard.Modifiers == ModifierKeys.Shift)
   {
       var input = "*";
   }
}

4、

WPF 软件退出,结束线程:某些应用程序的生命周期可能不依赖于主窗口或最后一个窗口何时关闭,或者根本不依赖于窗口。对于这些场景,需要将ShutdownMode属性设置为OnExplicitShutdown,这需要显式Shutdown方法调用来停止应用程序。否则,应用程序将继续在后台运行。

    设置ShutdownMode为OnLastWindowClose,WPF 隐式地在应用程序中的最后一个窗口关闭时调用Shutdown,即使任何当前实例化的窗口设置为主窗口,如果打开了一个新窗口,并且没有关闭它,关闭就不会被调用;

    ShutdownMode的OnMainWindowClose使 WPF 在隐式调用Shutdown时MainWindow将关闭,即使当前打开了其他窗口。

public void Close()
{    
    //该种方式有异常
    App.Current.MainWindow.Close();
    App.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
    App.Current.Shutdown();
    //建议使用下面方法,直接结束线程
    Environment.Exit(0); //直接退出程序,结束线程
}

5、 查找样式、模板中的控件名

public void Test()
{
方法一:
    ComboBox combo = (ComboBox)sender;
    if (combo != null)
    {
        var txt = combo.Template.FindName("PART_EditableTextBox", combo);
        Controls.WaterMaskTextBox waterBox = txt as Controls.WaterMaskTextBox;
        if (waterBox != null)
        {
            waterBox.CaretIndex = nlength;
        }
    }

方法二:
    var bord = VisualTreeHelper.GetChild(this, 0) as Border;
    Grid gr = bord.FindName("radioGd") as Grid;
    Grid gr2 = gr.FindName("gridDeal") as Grid;
}

6、TextBox中屏蔽输入法;一般应用在密码输入

xmlns:input="clr-namespace:System.Windows.Input;assembly=PresentationCore"
//对应控件添加
input:InputMethod.IsInputMethodEnabled="False"

7、ListBox控件中,设置选中多个或者是单个功能,可以通过设置属性SelectionMode(枚举类型)来实现,无需再实现;

Extended     用户可以按下 Shift 键来选择多个连续项。Ctrl 键选中多个
Multiple     用户可以选择多个项而无需按下修改键。
Single       用户一次只能选择一项。

8、界面数据未及时更新到绑定的属性原因:

UpdateSourceTrigger指定了需要更新数据的时机,即使使用了Mode=TwoWay,界面的数据变了,也需要等待数据更新的时机。
UpdateSourceTrigger一共包含有四种方式:Default,PropertyChanged,LostFocus,Explicit。
    Default: 由不同控件控制. 例如 TextBox, 当 LostFocus 事件触发时,目标绑定发生变化.
    PropertyChanged: 意味着当目标控件值发生变化时,源数据立马更新.例如, TextBox是目标绑定,当输入字符时, 源数据也发生变化. 着就意味着当你输入字符创的时候,TextBox的数据Text也在改变.
    Explicit: 当UpdateSourceTrigger 设置为 Explicit, 数据源不会自动更新,只有在后代码里面显示的触发。

9、控件在禁用状态下,按钮是没有悬浮提示信息的,是事件触发的机制;如果要禁用下也有悬浮提示,可以在控件外面加一层,或者对ToolTipService.ShowOnDisabled属性进行设置,例如:


    

10、Window 窗口获得焦点和失去焦点事件(窗口变为背景窗口、窗口切换等都引起窗口焦点失去)

/*
Activated获得焦点事件 和 Deactivated失去焦点的事件:
    Activated: 获得焦点 (首次打开软件时;由别的软件切换回当前软件时;点击当前软件在任务栏的按钮时)
    Deactivated:失去焦点,与Activated正好相反,(Deactivated = de + activated)
    使用方法有两种:
第一种是在XAML中声明,然后在后台书写执行代码:
*/


            
private void Window_Activated(object sender, EventArgs e)
{
    System.Windows.MessageBox.Show("It is activating...");
}
//第二种是都在后台书写代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.Activated += Window_Activated;
    }

    private void Window_Activated(object sender, EventArgs e)
    {
        System.Windows.MessageBox.Show("It is activating...");
    }
}
//失去焦点Deactivated是用法与上述一致。

11、在Window窗口使用“Popup”控件,弹出的窗口总是置顶的,当窗口失去焦点(打开新的其他软件程序等,“Popup”控件还是显示在最前面,并没有跟随窗体变化),不修改“Popup”控件样式情况下,可以通过window的属性“Deactivated”控制,失去焦点时候隐藏,得到焦点的时候显示;

12、在VS2013中,查找中文方法,Ctrl + F ,不区分大小写,使用全字匹配,使用正则表达式;

 查找文件中是否存在中文:(".*[\u4E00-\u9FA5]+)|([\u4E00-\u9FA5]+.*")

 13、WPF中 Lable或者TextBlock等控件字体加粗和斜体设置

Label1.FontWeight = FontWeights.Bold;//粗体
Label1.FontStyle = FontStyles.Italic;//斜体

14、

15、

16、

17、

18、

19、

20、

你可能感兴趣的:(WPF)