2

我正在尝试在运行时以编程方式更改 Windows Phone 8.1 应用程序中文本框的输入范围,但该更改仅在第一次有效。

我有这个 xaml 页面:

<Page
    x:Class="InputScopeTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:InputScopeTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="53,117,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="302"/>
        <Button x:Name="buttonAlpha" Content="Alpha" HorizontalAlignment="Left" Margin="53,229,0,0" VerticalAlignment="Top" Click="buttonAlpha_Click"/>
        <Button x:Name="buttonNumeric" Content="Numeric" HorizontalAlignment="Left" Margin="246,229,0,0" VerticalAlignment="Top" Click="buttonNumeric_Click"/>
    </Grid>
</Page>

而这个 .cs 页面:

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Navigation;

namespace InputScopeTest
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void buttonAlpha_Click(object sender, RoutedEventArgs e)
        {
            InputScope scope = new InputScope();
            InputScopeName name = new InputScopeName();

            name.NameValue = InputScopeNameValue.AlphanumericFullWidth;
            scope.Names.Add(name);

            textBox.InputScope = scope;
        }

        private void buttonNumeric_Click(object sender, RoutedEventArgs e)
        {
            InputScope scope = new InputScope();
            InputScopeName name = new InputScopeName();

            name.NameValue = InputScopeNameValue.Number;
            scope.Names.Add(name);

            textBox.InputScope = scope;
        }
    }
}

在模拟器和 windows phone 8.1 设备上,文本框的输入范围只有在您第一次点击其中一个按钮时才会正确更改。例如,如果我先点击“数字”按钮,输入范围会正确更改为数字键盘。但是,如果我随后点击“Alpha”按钮,则输入范围不会更改为应有的字母数字键盘。

上面的代码取自MSDN,它看起来只有在您第一次更改范围时才有效。第二次更改被忽略。

难道我做错了什么?是否有另一种方法可以多次以编程方式设置文本框的输入范围?

4

0 回答 0