当前位置:首页 > 操作系统 > Windows

背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox

原文:背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox

[源码下载]

背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox


作者:webabcd

介绍
背水一战 Windows 10 之 控件(文本类)

  • TextBox
  • PasswordBox


示例
1、TextBox 的示例 1
Controls/TextControl/TextBoxDemo1.xaml

<span><</span><span>Page
    </span><span>x:Class</span><span>="Windows10.Controls.TextControl.TextBoxDemo1"</span><span>
    xmlns</span><span>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span>
    xmlns:x</span><span>="http://schemas.microsoft.com/winfx/2006/xaml"</span><span>
    xmlns:local</span><span>="using:Windows10.Controls.TextControl"</span><span>
    xmlns:d</span><span>="http://schemas.microsoft.com/expression/blend/2008"</span><span>
    xmlns:mc</span><span>="http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span>
    mc:Ignorable</span><span>="d"</span><span>></span><span><</span><span>Grid </span><span>Background</span><span>="Transparent"</span><span>></span><span><</span><span>StackPanel </span><span>Margin</span><span>="10 0 10 10"</span><span>></span><span><!--</span><span>
                TextBox - 文本输入框
                    Text - 文本值
                    Header - 可以设置一个纯文本,不能命中测试,空 Header 的话不会占用任何空间
                    HeaderTemplate - 可以将 Header 设置为任何 xaml,且支持命中测试
                    MaxLength - 最大字符数(默认是 0 代表无限制)
                    PlaceholderText - 占位符水印
                    AcceptsReturn - 是否允许输入和显示回车符和换行符
                    IsSpellCheckEnabled - 是否开启拼写检查功能
                    IsTextPredictionEnabled - 是否开启输入预测功能
                    DesiredCandidateWindowAlignment - IME 的对齐方式(IME - Input Method Editor; SIP - Soft Input Panel)
                        Default - 当使用硬键盘时,IME 会随着光标移动;当使用软键盘时,IME 停靠于 SIP
                        BottomEdge - 当使用硬键盘时,IME 会与文本编辑控件的底部边缘和左侧对齐(经测试仅微软输入法有效,也许是第三方输入法没有实现某个接口);当使用软键盘时,IME 停靠于 SIP
            </span><span>--></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox1"</span><span> Margin</span><span>="5"</span><span> Height</span><span>="100"</span><span>
                     Header</span><span>="文本框"</span><span>
                     PlaceholderText</span><span>="enter your text"</span><span>
                     MaxLength</span><span>="32"</span><span>
                     TextWrapping</span><span>="Wrap"</span><span>
                     AcceptsReturn</span><span>="True"</span><span>
                     IsSpellCheckEnabled</span><span>="False"</span><span>
                     IsTextPredictionEnabled</span><span>="True"</span><span>
                     DesiredCandidateWindowAlignment</span><span>="Default"</span><span>/></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox2"</span><span> Margin</span><span>="5"</span><span>
                     Text</span><span>="textBox2"</span><span>
                     TextAlignment</span><span>="Center"</span><span>
                     IsReadOnly </span><span>="True"</span><span>></span><span><</span><span>TextBox.HeaderTemplate</span><span>></span><span><</span><span>DataTemplate</span><span>></span><span><</span><span>TextBlock </span><span>Text</span><span>="文本框"</span><span> Foreground</span><span>="Red"</span><span>/></span><span></</span><span>DataTemplate</span><span>></span><span></</span><span>TextBox.HeaderTemplate</span><span>></span><span></</span><span>TextBox</span><span>></span><span><!--</span><span>
                InputScope - 指定 SIP(Soft Input Panel)的类型
            </span><span>--></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox3"</span><span> Margin</span><span>="5"</span><span> InputScope</span><span>="Number"</span><span>/></span><span><!--</span><span>
                在 CodeBehind 端设置此 TextBox 的 InputScope
            </span><span>--></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox4"</span><span> Margin</span><span>="5"</span><span>/></span><span><!--</span><span>
                TextWrapping - 换行方式
                    NoWrap - 不换行
                    Wrap - 换行,必要时可截断单词
                    WrapWholeWords - 换行,但是绝不截断单词,即使单词可能会显示不全(经测试无效,TextBlock 是支持的)
            </span><span>--></span><span><</span><span>TextBox </span><span>Width</span><span>="100"</span><span> HorizontalAlignment</span><span>="Left"</span><span> Text</span><span>="abcdefghijklmnopq www"</span><span> Margin</span><span>="5"</span><span> TextWrapping</span><span>="NoWrap"</span><span>/></span><span><</span><span>TextBox </span><span>Width</span><span>="100"</span><span> HorizontalAlignment</span><span>="Left"</span><span> Text</span><span>="abcdefghijklmnopq www"</span><span> Margin</span><span>="5"</span><span> TextWrapping</span><span>="Wrap"</span><span>/></span><span><!--</span><span>
                 TextAlignment - 文本的水平对齐方式
                    Center, Left(默认值), Right, Justify(两端对齐,经测试无效,TextBlock 是支持的)
            </span><span>--></span><span><</span><span>TextBox </span><span>Text</span><span>="i am a &quot;TextBlock&quot;"</span><span> Margin</span><span>="5"</span><span> TextAlignment</span><span>="Right"</span><span>/></span><span></</span><span>StackPanel</span><span>></span><span></</span><span>Grid</span><span>></span><span></</span><span>Page</span><span>></span>

Controls/TextControl/TextBoxDemo1.xaml.cs

<span>/*</span><span>
 * TextBox - 文本输入框(继承自 Control, 请参见 /Controls/BaseControl/ControlDemo/)
 </span><span>*/</span><span>using</span><span> Windows.UI.Xaml;
</span><span>using</span><span> Windows.UI.Xaml.Controls;
</span><span>using</span><span> Windows.UI.Xaml.Input;

</span><span>namespace</span><span> Windows10.Controls.TextControl
{
    </span><span>public</span><span>sealed</span><span>partial</span><span>class</span><span> TextBoxDemo1 : Page
    {
        </span><span>public</span><span> TextBoxDemo1()
        {
            </span><span>this</span><span>.InitializeComponent();

            </span><span>this</span>.Loaded +=<span> TextBoxDemo1_Loaded;
        }

        </span><span>private</span><span>void</span> TextBoxDemo1_Loaded(<span>object</span><span> sender, RoutedEventArgs e)
        {
            </span><span>//</span><span> 在 CodeBehind 端设置 TextBox 的 InputScope</span>
            InputScope scope = <span>new</span><span> InputScope();
            InputScopeName name </span>= <span>new</span><span> InputScopeName();

            name.NameValue </span>=<span> InputScopeNameValue.ChineseFullWidth;
            scope.Names.Add(name);

            textBox4.InputScope </span>=<span> scope;
        }
    }
}</span>


2、TextBox 的示例 2
Controls/TextControl/TextBoxDemo2.xaml

<span><</span><span>Page
    </span><span>x:Class</span><span>="Windows10.Controls.TextControl.TextBoxDemo2"</span><span>
    xmlns</span><span>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span>
    xmlns:x</span><span>="http://schemas.microsoft.com/winfx/2006/xaml"</span><span>
    xmlns:local</span><span>="using:Windows10.Controls.TextControl"</span><span>
    xmlns:d</span><span>="http://schemas.microsoft.com/expression/blend/2008"</span><span>
    xmlns:mc</span><span>="http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span>
    mc:Ignorable</span><span>="d"</span><span>></span><span><</span><span>Grid </span><span>Background</span><span>="Transparent"</span><span>></span><span><</span><span>StackPanel </span><span>Margin</span><span>="10 0 10 10"</span><span>></span><span><!--</span><span>用于显示 Segoe UI Emoji 字符</span><span>--></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox1"</span><span> Margin</span><span>="5"</span><span> TextWrapping</span><span>="Wrap"</span><span>/></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox2"</span><span> Margin</span><span>="5"</span><span>/></span><span><</span><span>TextBlock </span><span>Name</span><span>="textBlock2"</span><span> Margin</span><span>="5"</span><span>/></span><span><</span><span>TextBox </span><span>Name</span><span>="textBox3"</span><span> Margin</span><span>="5"</span><span>/></span><span><</span><span>ScrollViewer </span><span>Margin</span><span>="5"</span><span> Height</span><span>="300"</span><span>></span><span><</span><span>TextBlock </span><span>Name</span><span>="textBlock3"</span><span>/></span><span></</span><span>ScrollViewer</span><span>></span><span></</span><span>StackPanel</span><span>></span><span></</span><span>Grid</span><span>></span><span></</span><span>Page</span><span>></span>

Controls/TextControl/TextBoxDemo2.xaml.cs

<span>/*</span><span>
 * TextBox - 文本输入框(继承自 Control, 请参见 /Controls/BaseControl/ControlDemo/)
 *     IsColorFontEnabled - 是否以彩色方式显示 Segoe UI Emoji 之类的字符(默认值是 true) 
 *     SelectAll() - 选中全部内容(先要获取焦点后,才能做这个操作)
 *     Select(int start, int length) - 选中指定范围的内容(先要获取焦点后,才能做这个操作)
 *     SelectedText - 选中的内容
 *     SelectionStart - 选中内容的起始位置
 *     SelectionLength - 选中内容的字符数
 *     SelectionHighlightColor - 选中文本的颜色
 *     PreventKeyboardDisplayOnProgrammaticFocus - 通过 FocusState.Programmatic 让 TextBox 获取焦点时,是否不显示软键盘
 *     GetLinguisticAlternativesAsync() - 获取输入法编辑器 (IME) 窗口中的候选词列表(经测试仅微软输入法有效,也许是第三方输入法没有实现某个接口)
 *     GetRectFromCharacterIndex(int charIndex, bool trailingEdge) - 获取指定字符的边缘位置的 Rect 对象
 *         charIndex - 字符的位置
 *         trailingEdge - false 代表前边缘(左边缘),true 代表后边缘(右边缘)
 *
 *     TextBox 的相关事件的说明详见代码部分的注释
 </span><span>*/</span><span>using</span><span> System;
</span><span>using</span><span> System.Text;
</span><span>using</span><span> Windows.UI;
</span><span>using</span><span> Windows.UI.Popups;
</span><span>using</span><span> Windows.UI.Xaml;
</span><span>using</span><span> Windows.UI.Xaml.Controls;
</span><span>using</span><span> Windows.UI.Xaml.Media;

</span><span>namespace</span><span> Windows10.Controls.TextControl
{
    </span><span>public</span><span>sealed</span><span>partial</span><span>class</span><span> TextBoxDemo2 : Page
    {
        </span><span>public</span><span> TextBoxDemo2()
        {
            </span><span>this</span><span>.InitializeComponent();

            </span><span>this</span>.Loaded +=<span> TextBoxDemo2_Loaded;
        }

        </span><span>private</span><span>void</span> TextBoxDemo2_Loaded(<span>object</span><span> sender, RoutedEventArgs e)
        {
            </span><span>//</span><span> 显示 Segoe UI Emoji 字符</span>
            StringBuilder strContect = <span>new</span><span> StringBuilder();
            </span><span>for</span> (<span>int</span> code = <span>0x1F600</span>; code < <span>0x1F6C6</span>; code++<span>)
            {
                strContect.Append(</span><span>char</span><span>.ConvertFromUtf32(code));
            }
            </span><span>//</span><span> 是否以彩色方式显示 Segoe UI Emoji 之类的字符(默认值是 true) </span>
            textBox1.IsColorFontEnabled = <span>true</span><span>;
            textBox1.Text </span>=<span> strContect.ToString();



            textBox2.Text </span>= <span>"</span><span>123456</span><span>"</span><span>;
            </span><span>//</span><span> 当通过 FocusState.Programmatic 让 textBox2 获取焦点时,不显示软键盘</span>
            textBox2.PreventKeyboardDisplayOnProgrammaticFocus = <span>true</span><span>;
            </span><span>//</span><span> 通过 FocusState.Programmatic 让 textBox2 获取焦点</span><span>            textBox2.Focus(FocusState.Programmatic);
            </span><span>//</span><span> 获取焦点后,才能 Select() 或 SelectAll()</span>
            textBox2.Select(<span>1</span>, <span>4</span>); <span>//</span><span> SelectAll() - 选中全部</span>
            textBox2.SelectionHighlightColor = <span>new</span><span> SolidColorBrush(Colors.Orange);

            textBlock2.Text </span>= <span>"</span><span>SelectedText: </span><span>"</span> +<span> textBox2.SelectedText;
            textBlock2.Text </span>+=<span> Environment.NewLine;
            textBlock2.Text </span>+= <span>"</span><span>SelectionStart: </span><span>"</span> +<span> textBox2.SelectionStart;
            textBlock2.Text </span>+=<span> Environment.NewLine;
            textBlock2.Text </span>+= <span>"</span><span>SelectionLength: </span><span>"</span> +<span> textBox2.SelectionLength;
            textBlock2.Text </span>+=<span> Environment.NewLine;

            </span><span>//</span><span> 获取第 1 个字符的左边缘的 Rect 对象</span>
            textBlock2.Text += <span>"</span><span>GetRectFromCharacterIndex(0, false): </span><span>"</span> + textBox2.GetRectFromCharacterIndex(<span>0</span>, <span>false</span><span>).ToString();
            textBlock2.Text </span>+=<span> Environment.NewLine;
            </span><span>//</span><span> 获取第 1 个字符的右边缘的 Rect 对象</span>
            textBlock2.Text += <span>"</span><span>GetRectFromCharacterIndex(0, true): </span><span>"</span> + textBox2.GetRectFromCharacterIndex(<span>0</span>, <span>true</span><span>).ToString();

            

            </span><span>//</span><span> TextBox 的相关事件的说明及演示如下

            </span><span>//</span><span> 当文本发生变化时触发的事件</span>
            textBox3.TextChanging +=<span> TextBox3_TextChanging;
            </span><span>//</span><span> 当文本发生变化后触发的事件</span>
            textBox3.TextChanged +=<span> TextBox3_TextChanged;

            </span><span>//</span><span> 选中的文本发生变化后触发的事件</span>
            textBox3.SelectionChanged +=<span> TextBox3_SelectionChanged;
            </span><span>//</span><span> 在 TextBox 中做粘贴操作时触发的事件</span>
            textBox3.Paste +=<span> TextBox3_Paste;
            </span><span>//</span><span> 在 TextBox 中打开上下文菜单时触发的事件(触摸屏长按或鼠标右键)</span>
            textBox3.ContextMenuOpening +=<span> TextBox3_ContextMenuOpening;

            </span><span>//</span><span> 在打开、更新或关闭输入法编辑器 (IME) 窗口时触发的事件(经测试仅微软输入法有效,也许是第三方输入法没有实现某个接口)</span>
            textBox3.CandidateWindowBoundsChanged +=<span> TextBox3_CandidateWindowBoundsChanged;
            </span><span>//</span><span> 当通过输入方法编辑器 (IME) 组成的文本出现变化时触发的事件</span>
            textBox3.TextCompositionChanged +=<span> TextBox3_TextCompositionChanged;
            </span><span>//</span><span> 当用户开始通过输入方法编辑器 (IME) 组成文本时触发的事件</span>
            textBox3.TextCompositionStarted +=<span> TextBox3_TextCompositionStarted;
            </span><span>//</span><span> 当用户停止通过输入方法编辑器 (IME) 组成文本时触发的事件</span>
            textBox3.TextCompositionEnded +=<span> TextBox3_TextCompositionEnded;
        }

        </span><span>private</span><span>void</span><span> TextBox3_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
        {
            textBlock3.Text </span>+= <span>"</span><span>TextChanging: </span><span>"</span> +<span> textBox3.Text;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>void</span> TextBox3_TextChanged(<span>object</span><span> sender, TextChangedEventArgs e)
        {
            textBlock3.Text </span>+= <span>"</span><span>TextChanged: </span><span>"</span> +<span> textBox3.Text;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>void</span> TextBox3_SelectionChanged(<span>object</span><span> sender, RoutedEventArgs e)
        {
            textBlock3.Text </span>+= <span>"</span><span>SelectionChanged: </span><span>"</span> +<span> textBox3.SelectedText;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>async</span><span>void</span> TextBox3_Paste(<span>object</span><span> sender, TextControlPasteEventArgs e)
        {
            </span><span>await</span><span>new</span> MessageDialog(<span>"</span><span>禁用粘贴</span><span>"</span><span>).ShowAsync();

            </span><span>//</span><span> 将路由事件设置为已处理,从而禁用粘贴功能</span>
            e.Handled = <span>true</span><span>;
        }

        </span><span>private</span><span>void</span> TextBox3_ContextMenuOpening(<span>object</span><span> sender, ContextMenuEventArgs e)
        {
            textBlock3.Text </span>+= <span>"</span><span>ContextMenuOpening</span><span>"</span><span>;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>void</span><span> TextBox3_CandidateWindowBoundsChanged(TextBox sender, CandidateWindowBoundsChangedEventArgs args)
        {
            </span><span>//</span><span> CandidateWindowBoundsChangedEventArgs.Bounds - 获取 IME 窗口的 Rect 对象</span>
            textBlock3.Text += <span>"</span><span>CandidateWindowBoundsChanged: </span><span>"</span> +<span> args.Bounds.ToString();
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>async</span><span>void</span><span> TextBox3_TextCompositionChanged(TextBox sender, TextCompositionChangedEventArgs args)
        {
            </span><span>//</span><span> TextCompositionChangedEventArgs.StartIndex - 通过 IME 组成的文本的起始位置
            </span><span>//</span><span> TextCompositionChangedEventArgs.Length - 通过 IME 组成的文本的长度</span>
            textBlock3.Text += $<span>"</span><span>TextCompositionChanged StartIndex:{args.StartIndex}, Length:{args.Length}</span><span>"</span><span>;
            textBlock3.Text </span>+=<span> Environment.NewLine;


            </span><span>//</span><span> GetLinguisticAlternativesAsync() - 获取输入法编辑器 (IME) 窗口中的候选词列表(经测试仅微软输入法有效,也许是第三方输入法没有实现某个接口)</span><span>var</span> candidateWords = <span>await</span><span> textBox3.GetLinguisticAlternativesAsync();
            textBlock3.Text </span>+= <span>"</span><span>candidate words: </span><span>"</span> + <span>string</span>.Join(<span>"</span><span>,</span><span>"</span><span>, candidateWords); ;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>void</span><span> TextBox3_TextCompositionStarted(TextBox sender, TextCompositionStartedEventArgs args)
        {
            </span><span>//</span><span> TextCompositionStartedEventArgs.StartIndex - 通过 IME 组成的文本的起始位置
            </span><span>//</span><span> TextCompositionStartedEventArgs.Length - 通过 IME 组成的文本的长度</span>
            textBlock3.Text += $<span>"</span><span>TextCompositionStarted StartIndex:{args.StartIndex}, Length:{args.Length}</span><span>"</span><span>;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }

        </span><span>private</span><span>void</span><span> TextBox3_TextCompositionEnded(TextBox sender, TextCompositionEndedEventArgs args)
        {
            </span><span>//</span><span> TextCompositionEndedEventArgs.StartIndex - 通过 IME 组成的文本的起始位置
            </span><span>//</span><span> TextCompositionEndedEventArgs.Length - 通过 IME 组成的文本的长度</span>
            textBlock3.Text += $<span>"</span><span>TextCompositionEnded StartIndex:{args.StartIndex}, Length:{args.Length}</span><span>"</span><span>;
            textBlock3.Text </span>+=<span> Environment.NewLine;
        }
    }
}</span>


3、PasswordBox 的示例
Controls/TextControl/PasswordBoxDemo.xaml

<span><</span><span>Page
    </span><span>x:Class</span><span>="Windows10.Controls.TextControl.PasswordBoxDemo"</span><span>
    xmlns</span><span>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span>
    xmlns:x</span><span>="http://schemas.microsoft.com/winfx/2006/xaml"</span><span>
    xmlns:local</span><span>="using:Windows10.Controls.TextControl"</span><span>
    xmlns:d</span><span>="http://schemas.microsoft.com/expression/blend/2008"</span><span>
    xmlns:mc</span><span>="http://schemas.openxmlformats.org/markup-compatibility/2006"</span><span>
    mc:Ignorable</span><span>="d"</span><span>></span><span><</span><span>Grid </span><span>Background</span><span>="Transparent"</span><span>></span><span><</span><span>StackPanel </span><span>Margin</span><span>="10 0 10 10"</span><span>></span><span><!--</span><span>
                PasswordBox - 密码输入框
                    Password - 密码值
                    PasswordChar - 密码框所显示显示的密码替代字符。默认值为“●”
                    IsPasswordRevealButtonEnabled - 是否显示“显示密码明文”按钮(弃用了)
                    PasswordRevealMode - 密码显示方式
                        Peek - 密文显示,按下“显示密码明文”按钮时显示明文(默认值)
                        Hidden - 密文显示,“显示密码明文”按钮不可见
                        Visible - 明文显示,“显示密码明文”按钮不可见
                    Header - 可以设置一个纯文本,不能命中测试,空 Header 的话不会占用任何空间
                    HeaderTemplate - 可以将 Header 设置为任何 xaml,且支持命中测试
                    MaxLength - 最大字符数(默认是 0 代表无限制)
                    PlaceholderText - 占位符水印
            </span><span>--></span><span><</span><span>PasswordBox </span><span>Name</span><span>="passwordBox1"</span><span> Width</span><span>="200"</span><span> Margin</span><span>="5"</span><span> HorizontalAlignment</span><span>="Left"</span><span> 
                         Header</span><span>="密码"</span><span>
                         PlaceholderText</span><span>="enter your password"</span><span>
                         MaxLength</span><span>="6"</span><span> 
                         PasswordChar</span><span>="@"</span><span>
                         PasswordRevealMode</span><span>="Peek"</span><span>/></span><span><</span><span>PasswordBox </span><span>Name</span><span>="passwordBox2"</span><span> Width</span><span>="200"</span><span> Margin</span><span>="5"</span><span> HorizontalAlignment</span><span>="Left"</span><span>></span><span><</span><span>PasswordBox.HeaderTemplate</span><span>></span><span><</span><span>DataTemplate</span><span>></span><span><</span><span>TextBlock </span><span>Text</span><span>="密码"</span><span> Foreground</span><span>="Red"</span><span>/></span><span></</span><span>DataTemplate</span><span>></span><span></</span><span>PasswordBox.HeaderTemplate</span><span>></span><span></</span><span>PasswordBox</span><span>></span><span><</span><span>TextBlock </span><span>Name</span><span>="textBlock"</span><span> Margin</span><span>="5"</span><span>/></span><span></</span><span>StackPanel</span><span>></span><span></</span><span>Grid</span><span>></span><span></</span><span>Page</span><span>></span>

Controls/TextControl/PasswordBoxDemo.xaml.cs

<span>/*</span><span>
 * PasswordBox - 密码输入框(继承自 Control, 请参见 /Controls/BaseControl/ControlDemo/)
 *     Password - 密码值
 *     SelectAll() - 选中 PasswordBox 中的所有字符(先要获取焦点后,才能做这个操作)
 *     SelectionHighlightColor - 选中文本的颜色
 *     PreventKeyboardDisplayOnProgrammaticFocus - 通过 FocusState.Programmatic 让 PasswordBox 获取焦点时,是否不显示软键盘
 *     PasswordChanged - Password 属性值发生变化时触发的事件
 *     Paste - 在 PasswordBox 中做粘贴操作时触发的事件
 *     ContextMenuOpening - 在 PasswordBox 中打开上下文菜单时触发的事件(触摸屏长按或鼠标右键)
 </span><span>*/</span><span>using</span><span> System;
</span><span>using</span><span> Windows.UI;
</span><span>using</span><span> Windows.UI.Popups;
</span><span>using</span><span> Windows.UI.Xaml;
</span><span>using</span><span> Windows.UI.Xaml.Controls;
</span><span>using</span><span> Windows.UI.Xaml.Media;

</span><span>namespace</span><span> Windows10.Controls.TextControl
{
    </span><span>public</span><span>sealed</span><span>partial</span><span>class</span><span> PasswordBoxDemo : Page
    {
        </span><span>public</span><span> PasswordBoxDemo()
        {
            </span><span>this</span><span>.InitializeComponent();

            </span><span>this</span>.Loaded +=<span> PasswordBoxDemo_Loaded;
        }

        </span><span>private</span><span>void</span> PasswordBoxDemo_Loaded(<span>object</span><span> sender, RoutedEventArgs e)
        {
            passwordBox2.Password </span>= <span>"</span><span>123456</span><span>"</span><span>;

            </span><span>//</span><span> 当通过 FocusState.Programmatic 让 passwordBox2 获取焦点时,不显示软键盘</span>
            passwordBox2.PreventKeyboardDisplayOnProgrammaticFocus = <span>true</span><span>;
            </span><span>//</span><span> 通过 FocusState.Programmatic 让 passwordBox2 获取焦点</span><span>            passwordBox2.Focus(FocusState.Programmatic);

            passwordBox2.SelectAll(); </span><span>//</span><span> 先要获取焦点后,才能做这个操作</span>
            passwordBox2.SelectionHighlightColor = <span>new</span><span> SolidColorBrush(Colors.Orange);

            passwordBox2.PasswordChanged </span>+= (x, y) =><span>
            {
                textBlock.Text </span>=<span> passwordBox2.Password;
            };

            passwordBox2.Paste </span>+= <span>async</span> (x, y) =><span>
            {
                </span><span>await</span><span>new</span> MessageDialog(<span>"</span><span>禁用粘贴</span><span>"</span><span>).ShowAsync();

                </span><span>//</span><span> 将路由事件设置为已处理,从而禁用粘贴功能</span>
                y.Handled = <span>true</span><span>;
            };

            passwordBox2.ContextMenuOpening </span>+= (x, y) =><span>
            {
                </span><span>//</span><span> 触发条件:触摸屏长按或鼠标右键 </span><span>            };
        }
    }
}</span>


OK
[源码下载]

原文:http://www.cnblogs.com/lonelyxmas/p/7567238.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐