必赢亚洲手机app下载


堪比Win平杜阿拉10款播放器

是因为未有勇气甘休你的一天

认清设备项目及响应VirtualKey366net必赢亚洲手机版

  蜀黍小编做的工作跟IM软件关于,UWP同时会跑在处理器和手提式无线电话机上。电脑和手提式无线电话机的使用习惯不尽一致,常常自个儿赞成于依照窗口尺寸来展开布局的变化,可是一定的操作习惯是借助于设备档次,而不是荧屏尺寸的,比如聊天窗口的出殡音信。假若如下场景,desktop运维时讲求回车键直接发送新闻,而mobile版则须要回车键换行,仅能透过点击按钮发送消息。

  第一段的映衬是为了今日波及的四个核心,判断设备项目和处理Shift+Enter的整合。

  首先判断设备档次大家运用的是Windows.System.Profile命名空间下的AnalyticsInfo类,通过AnalyticsInfo.VersionInfo.DeviceFamily那特天性大家得以获得近来的装备档次,小显示器的设施项目是”Windows.Mobile”,其余依然有Windows.Desktop,Windows.Xbox等。那里我们只愿意单身区分小显示器设备,不尊敬别的设备档次。同时须求建议的是,随之今后Windows设备项目标持续扩张,该属性恐怕出现的值会不断变更,所以在采纳时需求思索到变化是还是不是会产生bug。

        public bool IsAcceptReturn
        {
            get
            {
                return AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile";
            }
        }

  大家依照设备档次来定义了一天个性IsAcceptReturn来标识是还是不是接受回车键换行。

  接下去进行Shift+Enter组合键的响应了。UWP在那或多或少上果然又开了历史转折,没记错的话连WinForm也无需如此劳碌,竟然要额各省储存几个标志位来标识VirtualKey.Shift是或不是被按下,在此基础之上再进一步判断是还是不是有Enter键被触发。实际的代码中,笔者动用了KeyDown事件来记录Shift键的按下,同时通过KeyU事件来展开Enter键触发的判定。

        private void KeyUp(KeyRoutedEventArgs e)
        {
            if (e.Key == VirtualKey.Enter)
            {
                if (_isShiftKeyPressed)
                {
                    int oldIndex = Index;
                    InputText = InputText.Replace(Environment.NewLine, "\n").Insert(Index, "\n");
                    Index = oldIndex + 1;
                }
                else if (IsAcceptReturn == false)
                {
                    SendMessage();
                }
            }
            _isShiftKeyPressed = false;
        }

        private void KeyDown(KeyRoutedEventArgs e)
        {
            if (e.Key == VirtualKey.Shift)
            {
                _isShiftKeyPressed = true;
            }
        }

  在KeyUp事件中1经提到Enter键的触发,将判断_isShiftKeyPressed字段的值,同时根据IsAcceptReturn来判定是或不是不处理换行,直接发送信息。那里值得壹提的是Environment.NewLine在Windows下相应的“\r\n”符号,总计字符串索引时仅看成1个人处理,导致自家很难堪总是算不对Shift+Enter换行后的光标地方。无奈出下策将其替换到”\n”,个中奥妙各位壹试便知。程序对应的XAML如下:

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <ListView Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding Messages}"/>
        <TextBox Grid.Row="1" Grid.Column="0" Text="{Binding InputText, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectionStart="{Binding Index, Mode=TwoWay}"
                 MaxHeight="100" AcceptsReturn="{Binding IsAcceptReturn}" TextWrapping="Wrap">

            <Interactivity:Interaction.Behaviors>
                <Core:EventTriggerBehavior EventName="KeyUp">
                    <Core:InvokeCommandAction Command="{Binding KeyUpCommand,Mode=OneTime}"/>
                </Core:EventTriggerBehavior>
                <Core:EventTriggerBehavior EventName="KeyDown">
                    <Core:InvokeCommandAction Command="{Binding KeyDownCommand,Mode=OneTime}"/>
                </Core:EventTriggerBehavior>
            </Interactivity:Interaction.Behaviors>

        </TextBox>
        <Button Grid.Row="1" Grid.Column="1" Width="80" Command="{Binding SendMessageCommand}" Content="Send"/>
    </Grid>

  ListView模拟聊天窗口,TextBox的Text属性Binding到了InpuText,同时SlectionStar属性Binding到Index,用于Shift+Enter换行时,插入\n换行符号,及规定光标地点。AcceptsReturn属性在Mobile设备上是true,而在其他设备上就会1笑置之回车键来。TextWrapping属性也很关键,假诺不设置为Wrap,尽管实际的字符串是含有“\n”等换行符号,但在TextBox中也不会来得出来。

366net必赢亚洲手机版 1366net必赢亚洲手机版 2

  求看到那里的各位评论一下嗨,让小编知道还有人在看Windows
UWP。

366net必赢亚洲手机版,  Behaviors的利用本身安顿继续的稿子再介绍,同时本篇的代码应用了Mvvmlight框架,笔者想是时候把Mvvmlight的介绍也拾起来了!最终是完全代码在GitHub的地点,欢迎看了批评指正哈。

  https://github.com/manupstairs/UWPSamples/tree/master/UWPSamples/DeviceFamilyAndVirtualKey

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图