设为首页 收藏本站
查看: 1187|回复: 0

Windows Phone 7(WP7)开发 AutoCompletedBox制作中文城市名称输入框

[复制链接]

尚未签到

发表于 2015-5-9 15:56:15 | 显示全部楼层 |阅读模式
  Toolkit里的AutoCompletedBox默认的功能已经很强大了,做一个英文城市或者英文单词的提示,可以直接指定FilterMode为AutoCompleteFilterMode.SartsWith(或者其它更合适的过滤器)。
  对于自带的FilterMode,请参见MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.controls.autocompletefiltermode(VS.95).aspx
  
  但是对于中文城市名称过滤来说,恐怕还需要进一步修改。原因如下,由于我们的用户使用的输入可能是中文键盘,举一个很简单的例子来说:用户想找“北京”的时候,他输入[beijing,bei,b,北]都是需要提示的,注意,最后那个是中文,这个时候,就需要亲手来写一些代码啦。
  先上个效果图:
DSC0000.png
  首先是Model类

public class CityModel:BaseModel
{
private string _cityName = "";
private string _pinyin = "";
public string CityName
{
get { return _cityName; }
set
{
_cityName = value;
OnNotifyPropertyChanged("CityName");
}
}
public string Pinyin
{
get { return _pinyin; }
set { _pinyin = value; }
}
}
  Model类很简单,就2个属性,CityName为中文名称,Pinyin(嗯,确实是拼音……)为城市的拼音名。
  
  
  为了实现上图中Items的显示效果,我们需要对其模版进行修改,具体XAML如下:










  上面的XAML代码中唯一需要说明的就是AutoCompleteBox的ValueMemberPath属性,由于Item的数据源是CityModel类型的,如上图,这时如果用户点击“北京    beijing”这个项目时,在文本框中是显示"北京"或者"beijing"就取决于ValueMemberPath的设置了。
  
  
  在XAML的CS页面里,需要进一步指定AutoCompleteBox的数据源(抱歉没有严格使用MVVM绑定,这不是重点。。)

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
viewModel = new InputCityNameViewModel();
this.DataContext = viewModel;
TxtUserInput.ItemsSource = viewModel.ListCities;
TxtUserInput.FilterMode = AutoCompleteFilterMode.Custom;
TxtUserInput.ItemFilter = viewModel.Filter;
TxtUserInput.Focus();
}
ViewModel里的一些内容:
public class InputCityNameViewModel : BaseViewModel
{
public IList ListCities = new List();
public InputCityNameViewModel()
{
LoadCities();
}
private void LoadCities()
{
//读取城市信息
}
public bool Filter(string strInput, object toFilter)
{
CityModel model = (CityModel)toFilter;
if (model.Pinyin.StartsWith(strInput) || model.CityName.StartsWith(strInput))
return true;
else
{
return false;
}
}
}
  这里的关键就是Filter了,代码很简单,很容易看懂。
  
  
  
  顺便再谈一个Bug的问题,AutoCompleteBox在Pivot里面的提示显示是不正常的,而且显示和触控是错位的,网上有大牛给出了变相的解决办法,但我一直认为那太复杂,个人比较懒。。前两天Bing了一下,突然眼前一亮,截图纪念一下:
DSC0001.png

  粗略看了摘要之后(确实是粗略,因为中间有”…”我也没太注意),我当时以为随着Toolkit的新版的发布,这个问题已经解决了,但是点击进去一看,发现“Toolkit新版发布”和“AutoCompleteBox在Pivot的Bug的解决”这完全是两篇不同的文章…… 彻底崩溃。。
  但是必须要在Pivot里面让用户输入城市名字的,这个怎么办。后来直接用了个笨点的办法,我把Pivot里面的AutoCompleteBox换成了TextBox,然后当Text获得焦点之后,跳转到一个新页面,空白页面上只有AutoCompleteBox,当用户输入完成之后再把值传递回去,算是个障眼法么。。不过我记得有很多时候在手机上都是这么做的——当用户点击输入框之后屏幕上只显示输入框和键盘及候选字,输入完之后再返回去。这样用户体验也不会太差,总比在Pivot上面硬生生的让用户直面Bug来得好,这也算是一个临时的解决办法吧,期待Toolkit的升级~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65328-1-1.html 上篇帖子: 在windows 7旗舰版中安装并设置IIS 下篇帖子: Windows Phone 7 开发 31 日谈——第26日:与其他开发人员(免费)分享你的程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表