对UWP控件的一些认识了解
PasswordBox:
PasswordBox这个控件实现了输入密码的功能,可以通过对passwordBox_PasswordChanged()函数的编写改变对密码的要求等(比如禁止某些输入的出现)。同时,该控件有“睁眼模式”,以看到密码本身。控件自带的“睁眼模式”允许鼠标点击情况下的密码显示。但是这样的模式下,没有办法通过一次点击让密码一直显示。改变的方法有几种,比如再加一个checkbox或者其他按钮来使PasswordRevealMode变成visible,这样就可以一直显示密码。但是根据日常生活经验,常常使用的是直接点击眼睛,而不是其他按钮。PasswordBox没有办法直接实现这个功能。
AutoSuggestBox:
AutoSuggestBox实现了自动弹出选择项的功能,通过不同的函数来完成不同的任务,显示、选择和补全。但是三个函数的执行时间是一个容易搞错的点。根据资料,这三个函数的作用时间是:
- TextChanged event fires every time we enter something in AutoSuggestBox.
- QuerySubmitted event fires once we submit a query.
- SuggestionChosen event fires when the query submission ended with choosing an item and viewing it in AutoSuggestBox.
一开始当我在同一个TextBlock输出来验证不同函数执行情况的时候,发现输出的内容总是SuggestionChosen函数中的。照我的理解,QuerySubmitted是我按了查询之后才运行的,没想到SuggestionChosen是在QuerySubmitted之后的。而且在不进行选择的情况下,单单按查询按钮,是不会执行QuerySubmitted函数的。我也还没有找到连接查询按钮的函数。
我简单了试了一下输出的功能,但是在表单填写中,常常有一种情况是提示已经输入过的内容,而提示的串是包含或者被包含于我的输入串中的。
于是对函数进行了改写:
private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
{
Selected.Clear();
foreach (var item in suggestion)
{
flag = 0;
if (item.ToString().Contains(sender.Text) || sender.Text.Contains(item.ToString()))
{
Selected.Add(item.ToString());
flag = 1;
}
}
if(flag==1)
sender.ItemsSource = Selected;
if (first==1||flag==0)
{
bool Find = suggestion.Any<string>(p => p==sender.Text);
if(Find==false)
suggestion.Add(sender.Text);
first = 0;
}
}
}
private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
{
toshow.Text = "finding";
bool Find = suggestion.Any<string>(p => p == sender.Text);
if (Find == false)
suggestion.Add(sender.Text);
}
但是由于没有办法直接通过关联函数,使用起来不尽如人意。
DatePicker:
DatePicker提供日期选择的功能。在未进行选择时,不能显示年、月、日这样的具体标签说明,或者以无输入的状态的形式显示,而是给出了当日的日期。默认状态下的年月日安排并不符合使用习惯。另外,我无法一项一项地选择,这并不太符合我个人日常的使用习惯。
AppBarSeparator
AppBarSeparator的功能就是分割不同的app。uwp应该是可以绘制基本图形的,但是这里却有一个单独的控件用来分隔app图标。看到的时候觉得十分吃惊。
但是对于分隔图标这一个基本任务,也可以有很多要求,使用竖线显然是不能满足所有人的要求的。一开始以为会有某些属性可以帮助修改,但是资料里说,要修改default属性,需要修改這些资源及预设的 ControlTemplate(https://msdn.microsoft.com/zh-tw/library/windows/apps/mt299106.aspx)。我觉得从一个程度上来说,这并不十分友好,也许我想做的只是一个比较简单的改动,却不能直接进行修改。
PersonPicture:
PersonPicture控件用来显示用户头像,添加照片在ProfilePicture中,如<PersonPicture ProfilePicture="Assets/rabbit.png" />
。
很多软件有点击头像看原图的功能,但是PersonPicture控件并不能直接查看,鼠标放上去也没有任何反应,给我的感觉就像一个圆形的容器,功能有些简陋。另外,ProfilePicture在选取原型图案时也比较暴力,无法人为操纵,会导致选取的位置不恰当,比如下图,却没有把兔子的身体部分放入圆框中:
我对大多数控件的了解都很浅,所以有些功能可能存在我却不知道,希望今后的学习中能加深自己的认识。