silverlight2.0Beta版 TextBox中文输入解决办法

silverlight2.0Beta版 TextBox中文输入解决办法,第1张

概述问题描述 silverlight Beta 2.0 中TetBox输入汉字,除MS自己的输入法,其它所有输入法都会出现输入的东西会在TextBox中重复一次的现像,google ,Baidu了一下,大家说好像是silverlight自己的一个BUG,可能会在Repleass的时候修改。   解决办法:        新写一个TextBoxEx控件,继承于TextBox,并对TextBox的选择事件

问题描述

silverlight Beta 2.0 中TetBox输入汉字,除MS自己的输入法,其它所有输入法都会出现输入的东西会在TextBox中重复一次的现像,Google,BaIDu了一下,大家说好像是silverlight自己的一个BUG,可能会在Repleass的时候修改。

 

解决办法:

       新写一个TextBoxEx控件,继承于TextBox,并对TextBox的选择事件及字符改变事件做处理,以下是原代码

/************************************************************************/ /* 作者:覃小春 时间:20080826 说明:解决silverlightBeta2中TextBox中文输入问题  * blog:blog.csdn.net/colijian */ /************************************************************************/ using System.windows; using System.windows.Controls; namespace TextBoxEx {     public class TextBoxEx:TextBox     { #region  属性         private string _oldText = "";         private int _RecSelectStart = 0;         private int _RecSelectLength = 0; #endregion         public TextBoxEx()         {             TextChanged += new TextChangedEventHandler(TextBoxEx_TextChanged);             SelectionChanged += new RoutedEventHandler(TextBoxEx_SelectionChanged);         }         voID TextBoxEx_SelectionChanged(object sender, RoutedEventArgs e)         {             TextBox _sender = sender as TextBox;             if (_sender == null)                 return;            if (_sender.SelectionLength > 0)             {                //recode user select position                 _RecSelectLength = _sender.SelectionLength;                 _RecSelectStart = _sender.SelectionStart;             }            else             {                _RecSelectLength = 0;            }         }         voID TextBoxEx_TextChanged(object sender, TextChangedEventArgs e)         {             TextBox _sender = sender as TextBox;             if (_sender == null)                 return;             string textIfnor = _sender.Text;             #region 除去先中部份             if (_RecSelectLength != 0)             {                 _oldText = _oldText.Substring(0, _RecSelectStart) + _oldText.Substring(_RecSelectStart + _RecSelectLength, _oldText.Length - _RecSelectStart - _RecSelectLength);                 _RecSelectLength = 0;             }             #endregion             int LengthAdd = textIfnor.Length - _oldText.Length;             if (LengthAdd <= 0)             {                 _oldText = _sender.Text;                 //这种情况是删除数据                 return;             }             else if (LengthAdd % 2 == 0)             {                 //如果当前是成双的情况下                 //得到当前字符串                 string AddInfor = textIfnor.Substring(_sender.SelectionStart - LengthAdd, LengthAdd);                 if (!AddInfor.Substring(0, AddInfor.Length / 2).Equals(AddInfor.Substring(AddInfor.Length / 2)))                 {                     _oldText = _sender.Text;                     return;                 }                     //得到实际新增值                 AddInfor = AddInfor.Substring(0, AddInfor.Length / 2);                 //得到实际理论值                 string DealText = textIfnor.Substring(0, _sender.SelectionStart - LengthAdd) + AddInfor + textIfnor.Substring(_sender.SelectionStart, textIfnor.Length - _sender.SelectionStart);                 int RecodeselectSTart = _sender.SelectionStart - LengthAdd / 2;                 _sender.SelectionStart = 0;                 _sender.Text = DealText;                 _sender.SelectionStart = RecodeselectSTart;                 _oldText = DealText;             }             else              {                 _oldText = _sender.Text;             }         }     } }

使用:

 

 

<UserControl x:Class="MutilTextBox.Page"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"               xmlns:CT="clr-namespace:TextBoxEx;assembly=TextBoxEx"     WIDth="400" Height="300">     <GrID x:name="LayoutRoot" Background="White">         <GrID.RowDeFinitions>             <RowDeFinition Height="50"></RowDeFinition>             <RowDeFinition Height="50"></RowDeFinition>             <RowDeFinition Height="50"></RowDeFinition>             <RowDeFinition Height="50"></RowDeFinition>         </GrID.RowDeFinitions>         <TextBox x:name="FirstTextBox" Text="first" GrID.Row="0" TextChanged="FirstTextBox_TextChanged"></TextBox>         <CT:TextBoxEx x:name="SecondTextBox" GrID.Row="1"></CT:TextBoxEx>         <CT:TextBoxEx x:name="ThreeTextBox" GrID.Row="2"></CT:TextBoxEx>         <TextBox x:name="Four" GrID.Row="3" ></TextBox>     </GrID> </UserControl>

    

注意:要先加入名称空间,具体的值是:

clr-namespace:名称空间全名;assembly=程序集名称

 

不清楚怎样上传程序集!否则将程序集上传

 

若发此控件有问题,或是不足,请给我留言

总结

以上是内存溢出为你收集整理的silverlight2.0Beta版 TextBox中文输入解决办法全部内容,希望文章能够帮你解决silverlight2.0Beta版 TextBox中文输入解决办法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存