UWP — как создать элемент управления TokenAutoComplete

Я разрабатываю приложение UWP (Win10 - VS2015). Мне нужно текстовое поле Token на платформе Windows. Любая идея, пожалуйста, как запустить и создать этот элемент управления, а затем, когда вы пишете текст внутри текстового поля и ставите пробел или просто нажимаете на этот текст, он должен преобразоваться в выбранный токен. Смотрите фото (это просто для идеи). Мне нужен такой тип управления.

Вы также можете получить представление об этом сообщении TokenAutoComplete

введите здесь описание изображения


person Zia Ur Rahman    schedule 15.04.2016    source источник
comment
вы ссылались на эту ссылку to" title="как создать элемент управления токенизацией для uwp, известный из Outlook, при использовании to">stackoverflow.com/questions/36237644/?   -  person Archana    schedule 15.04.2016
comment
Здравствуйте, @Archana, еще раз спасибо за проявленный интерес. Я посмотрю на вашу ссылку, а также на блог внутри, а затем вернусь к вам в ближайшее время ИншаАллах. :)   -  person Zia Ur Rahman    schedule 15.04.2016
comment
@LovetoCode (Archana), я бы прочитал статью по указанной вами ссылке. На самом деле это отличная статья, особенно для пользователей WPF. Я пытаюсь реализовать его в приложениях UWP, но получаю много ошибок, потому что RichEditBox в UWP не имеет таких параметров, как в WPF RichTextBox. Поэтому мы просим вас обойти этот элемент управления в UWP и поделиться им. Это будет высоко оценено. Еще раз спасибо.   -  person Zia Ur Rahman    schedule 20.04.2016
comment
@LovetoCode, ты нашел/поработал над этим элементом управления? плз.   -  person Zia Ur Rahman    schedule 21.04.2016
comment
Я только что попробовал. Но, как вы сказали, RichEditBox имеет ограниченные возможности, я не смог вставить абзац. Обходной путь: у вас может быть ListView. Когда вы соответствуете определенному символу (например;), вы можете удалить текст из текстового поля и добавить его в ListView   -  person Archana    schedule 21.04.2016
comment
Или вы можете использовать RichTextBlock вместо ListView. Вы можете вставить абзац. Если вам нужен код, я могу предоставить.   -  person Archana    schedule 21.04.2016
comment
@LovetoCode, да, пожалуйста, дайте мне код, и если вы загрузите пример проекта на github, это будет очень признательно. Благодарю.   -  person Zia Ur Rahman    schedule 21.04.2016
comment
Это всего несколько строк кода. Не полный контроль. Так что, если вы хотите полный рабочий контроль, я опубликую его через несколько дней.   -  person Archana    schedule 21.04.2016
comment
@LovetoCode, хорошо, поделитесь здесь кодом с пояснением, я поработаю, и если не получу точный результат, сообщу вам, чтобы вы работали над полным контролем. Спасибо.   -  person Zia Ur Rahman    schedule 21.04.2016


Ответы (1)


Код, который я публикую, является исходным кодом, с которым вы можете начать создавать элемент управления.

Я использовал RichTextBlock и Textbox. Если вы поместите эти два элемента управления в WrapPanel внутри Gridview. Вы можете получить аналогичный контроль, который вы хотели, но я не пробовал.

 <RichTextBlock x:Name="tokenblock">
                <Paragraph>

                </Paragraph>

            </RichTextBlock>
            <TextBox  TextChanged="TextBox_TextChanged"/>

Код позади выглядит так

 private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            string text = (sender as TextBox).Text;
            if (text.Contains(';'))
            {
                Paragraph para;
                text = text.Substring(0, text.LastIndexOf(';'));
                if (tokenblock.Blocks.Count > 0)
                  para  = tokenblock.Blocks[0] as Paragraph;
                else
                 para = new Paragraph();
                InlineUIContainer inline = new InlineUIContainer();
                Border br = new Border();
                br.Background = new SolidColorBrush(Colors.Gray);
                br.CornerRadius = new CornerRadius(10);
                TextBlock tb = new TextBlock();
                br.MinWidth = 70;
                br.MaxWidth = 150;
                tb.Text = text;
                tb.TextWrapping = TextWrapping.Wrap;
                tb.Margin =new Thickness(10, 10, 10, 10);
                br.Child = tb;
                inline.Child = br;
                para.Inlines.Add(inline);
                (sender as TextBox).Text = "";
            }

//ниже коды, которые я не пробовал

   <GridView x:Name="myGridView" IsItemClickEnabled="True">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid Orientation="Horizontal" MaximumRowsOrColumns="5"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
//here  you have to put RichTextBlock and textbox as two gridview items 
person Archana    schedule 21.04.2016
comment
Хорошо, я попробую это и дам вам знать, иншаАллах. Спасибо. - person Zia Ur Rahman; 21.04.2016
comment
Большое спасибо, это сработало идеально. И извините, что ответил с опозданием. Только сегодня я использовал этот код, и с минимальными изменениями в соответствии с моими потребностями он работал идеально ... все еще есть небольшая проблема с выравниванием и переносом, но 95% работы выполнено. Благодарю. Я внесу изменения и поделюсь кодом здесь, когда доработаю его. Вернемся к вам в этом скоро ИншаАллах. - person Zia Ur Rahman; 29.04.2016