Пример #1
0
 private void TokenBox_TokenItemAdded(TokenizingTextBox sender, TokenizingTextBoxItem args)
 {
     if (args?.Content is Person person)
     {
         PickedPeople.Add(person);
     }
 }
        public async Task ShouldConfigureTokenizingTextBoxAutomationPeerAsync()
        {
            await App.DispatcherQueue.EnqueueAsync(async() =>
            {
                const string expectedAutomationName = "MyAutomationName";
                const string expectedName           = "MyName";
                const string expectedValue          = "Wor";

                var items = new ObservableCollection <TokenizingTextBoxTestItem> {
                    new() { Title = "Hello" }, new() { Title = "World" }
                };

                var tokenizingTextBox = new TokenizingTextBox {
                    ItemsSource = items
                };

                await SetTestContentAsync(tokenizingTextBox);

                var tokenizingTextBoxAutomationPeer =
                    FrameworkElementAutomationPeer.CreatePeerForElement(tokenizingTextBox) as TokenizingTextBoxAutomationPeer;

                Assert.IsNotNull(tokenizingTextBoxAutomationPeer, "Verify that the AutomationPeer is TokenizingTextBoxAutomationPeer.");

                // Asserts the automation peer name based on the Automation Property Name value.
                tokenizingTextBox.SetValue(AutomationProperties.NameProperty, expectedAutomationName);
                Assert.IsTrue(tokenizingTextBoxAutomationPeer.GetName().Contains(expectedAutomationName), "Verify that the UIA name contains the given AutomationProperties.Name of the TokenizingTextBox.");

                // Asserts the automation peer name based on the element Name property.
                tokenizingTextBox.Name = expectedName;
                Assert.IsTrue(tokenizingTextBoxAutomationPeer.GetName().Contains(expectedName), "Verify that the UIA name contains the given Name of the TokenizingTextBox.");

                tokenizingTextBoxAutomationPeer.SetValue(expectedValue);
                Assert.IsTrue(tokenizingTextBoxAutomationPeer.Value.Equals(expectedValue), "Verify that the Value contains the given Text of the TokenizingTextBox.");
            });
        }
Пример #3
0
 private void TokenItemRemoved(TokenizingTextBox sender, TokenItemRemovingEventArgs args)
 {
     if (args.Item is NewsCategories category)
     {
         vm.Filters.Remove(category.categoryName);
         UpdatePage();
     }
 }
Пример #4
0
 private void TokenItemAdded(TokenizingTextBox sender, object data)
 {
     if (data is NewsCategories category && sender.Items.Count < 5)
     {
         vm.Filters.Add(category.categoryName);
         UpdatePage();
     }
 }
Пример #5
0
 private void TokenItemRemoved(TokenizingTextBox sender, TokenItemRemovingEventArgs args)
 {
     if (args.Item is SampleDataType sample)
     {
         Debug.WriteLine("Removed Token: " + sample.Text);
     }
     else
     {
         Debug.WriteLine("Removed Token: " + args.Item);
     }
 }
 private void TokenItemAdded(TokenizingTextBox sender, TokenizingTextBoxItem args)
 {
     // TODO: Add InApp Notification?
     if (args.Content is SampleDataType sample)
     {
         Debug.WriteLine("Added Token: " + sample.Text);
     }
     else
     {
         Debug.WriteLine("Added Token: " + args.Content);
     }
 }
Пример #7
0
 private void TokenItemAdded(TokenizingTextBox sender, object data)
 {
     // TODO: Add InApp Notification?
     if (data is SampleDataType sample)
     {
         Debug.WriteLine("Added Token: " + sample.Text);
     }
     else
     {
         Debug.WriteLine("Added Token: " + data);
     }
 }
Пример #8
0
        private async void Page_Loaded(object sender, RoutedEventArgs e)
        {
            vm.Categories = await CryptoCompare.GetNewsCategories();

            _acv = new AdvancedCollectionView(vm.Categories, false);
            _acv.SortDescriptions.Add(new SortDescription(nameof(NewsCategories.categoryName), SortDirection.Ascending));

            _ttb        = CategoriesTokenBox;
            _acv.Filter = item => !_ttb.Items.Contains(item) && (item as NewsCategories).categoryName.Contains(_ttb.Text, StringComparison.CurrentCultureIgnoreCase);
            _ttb.SuggestedItemsSource = _acv;

            await UpdatePage();
        }
Пример #9
0
        private void EmailTokenItemRemoved(TokenizingTextBox sender, object args)
        {
            if (args is SampleEmailDataType sample)
            {
                Debug.WriteLine("Removed Email: " + sample.DisplayName);
            }
            else
            {
                Debug.WriteLine("Removed Token: " + args);
            }

            _acvEmail.RefreshFilter();
        }
Пример #10
0
        private void TagTokens_TokenItemAdding(TokenizingTextBox sender, TokenItemAddingEventArgs args)
        {
            // If the tag exists, use it. Otherwise cancel the event.
            if (App.Context.Tags.Local.Any(tag => tag.Name.Equals(args.TokenText, StringComparison.InvariantCultureIgnoreCase)))
            {
                Tag tag = App.Context.Tags.Local.First(tag => tag.Name.Equals(args.TokenText, StringComparison.InvariantCultureIgnoreCase));
                args.Item = tag;

                args.Cancel = false;
                return;
            }
            args.Cancel = true;
        }
        public void OnXamlRendered(FrameworkElement control)
        {
            if (_ttb != null)
            {
                _ttb.TokenItemAdded   -= TokenItemAdded;
                _ttb.TokenItemRemoved -= TokenItemRemoved;
            }

            if (control.FindChildByName("TokenBox") is TokenizingTextBox ttb)
            {
                _ttb = ttb;

                _ttb.TokenItemAdded   += TokenItemAdded;
                _ttb.TokenItemRemoved += TokenItemRemoved;
            }
        }
Пример #12
0
        public void OnXamlRendered(FrameworkElement control)
        {
            if (control.FindChildByName("CategoriesTokenBox") is TokenizingTextBox ttb)
            {
                _ttb = ttb;
                _ttb.TokenItemAdded    += TokenItemAdded;
                _ttb.TokenItemRemoving += TokenItemRemoved;
                _ttb.TextChanged       += TextChanged;
                _ttb.TokenItemAdding   += TokenItemCreating;
                _ttb.Tapped            += TokenBox_Tapped;

                _acv.Filter = item => !_ttb.Items.Contains(item) && (item as NewsCategories).categoryName.Contains(_ttb.Text, StringComparison.CurrentCultureIgnoreCase);

                _ttb.SuggestedItemsSource = _acv;
            }
        }
Пример #13
0
        private void EmailTokenItemAdding(TokenizingTextBox sender, TokenItemAddingEventArgs args)
        {
            // Search our list for a matching person
            foreach (var person in _emailSamples)
            {
                if (args.TokenText.Contains(person.EmailAddress) ||
                    args.TokenText.Contains(person.DisplayName, StringComparison.CurrentCultureIgnoreCase))
                {
                    args.Item = person;
                    return;
                }
            }

            // Otherwise don't create a token.
            args.Cancel = true;
        }
        public async Task Init()
        {
            await App.Dispatcher.EnqueueAsync(() =>
            {
                _acv = new AdvancedCollectionView(_samples, false);

                _acv.SortDescriptions.Add(new SortDescription(nameof(SampleDataType.Text), SortDirection.Ascending));

                var xamlTokenizingTextBox = @"<controls:TokenizingTextBox xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
                                                 xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
                                                 xmlns:controls='using:Microsoft.Toolkit.Uwp.UI.Controls'
                          PlaceholderText='Add Actions'
                          MaxHeight='104'
                          HorizontalAlignment='Center'
                          VerticalAlignment='Center'
                          TextMemberPath='Text'
                          TokenDelimiter = ','>
                        <controls:TokenizingTextBox.SuggestedItemTemplate>
                          <DataTemplate>
                            <StackPanel Orientation='Horizontal'>
                              <SymbolIcon Symbol='{Binding Icon}'/>
                              <TextBlock Text='{Binding Text}' Padding='4,0,0,0'/>
                            </StackPanel>
                          </DataTemplate>
                        </controls:TokenizingTextBox.SuggestedItemTemplate>
                        <controls:TokenizingTextBox.TokenItemTemplate>
                          <DataTemplate>
                            <StackPanel Orientation='Horizontal'>
                              <SymbolIcon Symbol='{Binding Icon}'/>
                              <TextBlock Text='{Binding Text}' Padding='4,0,0,0'/>
                            </StackPanel>
                          </DataTemplate>
                        </controls:TokenizingTextBox.TokenItemTemplate>
                      </controls:TokenizingTextBox>";

                _tokenizingTextBox = XamlReader.Load(xamlTokenizingTextBox) as TokenizingTextBox;
                _tokenizingTextBox.SuggestedItemsSource = _acv;

                TestsPage.Instance.SetMainTestContent(_tokenizingTextBox);

                _tokenizingTextBox.AddTokenItem(_samples[0], true);
                _tokenizingTextBox.AddTokenItem(_samples[1], true);
                _tokenizingTextBox.AddTokenItem(_samples[2], true);
            });
        }
Пример #15
0
        private async void TokenBox_TokenItemTokenItemAdding(TokenizingTextBox sender, TokenItemAddingEventArgs args)
        {
            using (args.GetDeferral())
            {
                // Try and convert typed text to people
                var graph = ProviderManager.Instance.GlobalProvider.Graph;
                if (graph != null)
                {
                    args.Item = (await graph.FindPersonAsync(args.TokenText)).CurrentPage.FirstOrDefault();
                }

                // If we didn't find anyone, then don't add anyone.
                if (args.Item == null)
                {
                    args.Cancel = true;

                    // TODO: We should raise a 'person not found' type event or automatically display some feedback?
                }
            }
        }
        public async Task ShouldThrowElementNotEnabledExceptionIfValueSetWhenDisabled()
        {
            await App.DispatcherQueue.EnqueueAsync(async() =>
            {
                const string expectedValue = "Wor";

                var tokenizingTextBox = new TokenizingTextBox {
                    IsEnabled = false
                };

                await SetTestContentAsync(tokenizingTextBox);

                var tokenizingTextBoxAutomationPeer =
                    FrameworkElementAutomationPeer.CreatePeerForElement(tokenizingTextBox) as TokenizingTextBoxAutomationPeer;

                Assert.ThrowsException <ElementNotEnabledException>(() =>
                {
                    tokenizingTextBoxAutomationPeer.SetValue(expectedValue);
                });
            });
        }
        public async Task ShouldReturnTokensForTokenizingTextBoxAutomationPeerAsync()
        {
            await App.DispatcherQueue.EnqueueAsync(async() =>
            {
                var items = new ObservableCollection <TokenizingTextBoxTestItem>
                {
                    new() { Title = "Hello" }, new() { Title = "World" }
                };

                var tokenizingTextBox = new TokenizingTextBox {
                    ItemsSource = items
                };

                await SetTestContentAsync(tokenizingTextBox);

                tokenizingTextBox
                .SelectAllTokensAndText();     // Will be 3 items due to the `AndText` that will select an empty text item.

                var tokenizingTextBoxAutomationPeer =
                    FrameworkElementAutomationPeer.CreatePeerForElement(tokenizingTextBox) as
                    TokenizingTextBoxAutomationPeer;

                Assert.IsNotNull(
                    tokenizingTextBoxAutomationPeer,
                    "Verify that the AutomationPeer is TokenizingTextBoxAutomationPeer.");

                var selectedItems = tokenizingTextBoxAutomationPeer
                                    .GetChildren()
                                    .Cast <ListViewItemAutomationPeer>()
                                    .Select(peer => peer.Owner as TokenizingTextBoxItem)
                                    .Select(item => item?.Content as TokenizingTextBoxTestItem)
                                    .ToList();

                Assert.AreEqual(3, selectedItems.Count);
                Assert.AreEqual(items[0], selectedItems[0]);
                Assert.AreEqual(items[1], selectedItems[1]);
                Assert.IsNull(selectedItems[2]); // The 3rd item is the empty text item.
            });
        }
Пример #18
0
        /// <inheritdoc/>
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            if (_tokenBox != null)
            {
                _tokenBox.TextChanged       -= TokenBox_TextChanged;
                _tokenBox.TokenItemAdded    -= TokenBox_TokenItemAdded;
                _tokenBox.TokenItemCreating -= TokenBox_TokenItemCreating;
                _tokenBox.TokenItemRemoved  -= TokenBox_TokenItemRemoved;
            }

            _tokenBox = GetTemplateChild(PeoplePickerTokenizingTextBoxName) as TokenizingTextBox;

            if (_tokenBox != null)
            {
                _tokenBox.TextChanged       += TokenBox_TextChanged;
                _tokenBox.TokenItemAdded    += TokenBox_TokenItemAdded;
                _tokenBox.TokenItemCreating += TokenBox_TokenItemCreating;
                _tokenBox.TokenItemRemoved  += TokenBox_TokenItemRemoved;
            }
        }
Пример #19
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TokenizingTextBoxAutomationPeer"/> class.
 /// </summary>
 /// <param name="owner">
 /// The <see cref="TokenizingTextBox" /> that is associated with this <see cref="T:Microsoft.Toolkit.Uwp.UI.Automation.Peers.TokenizingTextBoxAutomationPeer" />.
 /// </param>
 public TokenizingTextBoxAutomationPeer(TokenizingTextBox owner)
     : base(owner)
 {
 }
 private async void TokenItemRemoved(TokenizingTextBox sender, object args)
 {
     await ViewModel.UpdateFilters().ConfigureAwait(false);
 }
Пример #21
0
 private void TokenBox_TokenItemRemoved(TokenizingTextBox sender, TokenItemRemovedEventArgs args)
 {
     PickedPeople.Remove(args.Item as Person);
 }
 private void TokenItemAdded(TokenizingTextBox sender, TokenizingTextBoxItem args)
 {
     // TODO: Add InApp Notification?
     Debug.WriteLine("Added Token: " + args.Content);
 }
 private void TokenItemRemoved(TokenizingTextBox sender, TokenItemRemovedEventArgs args)
 {
     Debug.WriteLine("Removed Token: " + args.Item);
 }
Пример #24
0
        public void OnXamlRendered(FrameworkElement control)
        {
            SelectedTokens = new();
            SelectedEmails = new();

            control.DataContext = this;

            if (_ttb != null)
            {
                _ttb.TokenItemAdded    -= TokenItemAdded;
                _ttb.TokenItemRemoving -= TokenItemRemoved;
                _ttb.TextChanged       -= TextChanged;
                _ttb.TokenItemAdding   -= TokenItemCreating;
            }

            if (control.FindChild("TokenBox") is TokenizingTextBox ttb)
            {
                _ttb = ttb;
                _ttb.TokenItemAdded    += TokenItemAdded;
                _ttb.TokenItemRemoving += TokenItemRemoved;
                _ttb.TextChanged       += TextChanged;
                _ttb.TokenItemAdding   += TokenItemCreating;

                _acv.Filter = item => !_ttb.Items.Contains(item) && (item as SampleDataType).Text.Contains(_ttb.Text, System.StringComparison.CurrentCultureIgnoreCase);

                _ttb.SuggestedItemsSource = _acv;
            }

            // For the Email Selection control
            if (_ttbEmail != null)
            {
                _ttbEmail.ItemClick        -= EmailTokenItemClick;
                _ttbEmail.TokenItemAdding  -= EmailTokenItemAdding;
                _ttbEmail.TokenItemAdded   -= EmailTokenItemAdded;
                _ttbEmail.TokenItemRemoved -= EmailTokenItemRemoved;
                _ttbEmail.TextChanged      -= EmailTextChanged;
                _ttbEmail.PreviewKeyDown   -= EmailPreviewKeyDown;
            }

            if (control.FindChild("TokenBoxEmail") is TokenizingTextBox ttbEmail)
            {
                _ttbEmail = ttbEmail;

                _ttbEmail.ItemClick        += EmailTokenItemClick;
                _ttbEmail.TokenItemAdding  += EmailTokenItemAdding;
                _ttbEmail.TokenItemAdded   += EmailTokenItemAdded;
                _ttbEmail.TokenItemRemoved += EmailTokenItemRemoved;
                _ttbEmail.TextChanged      += EmailTextChanged;
                _ttbEmail.PreviewKeyDown   += EmailPreviewKeyDown;

                _acvEmail.Filter = item => !_ttbEmail.Items.Contains(item) && (item as SampleEmailDataType).DisplayName.Contains(_ttbEmail.Text, System.StringComparison.CurrentCultureIgnoreCase);
            }

            if (_ttbEmailSuggestions != null)
            {
                _ttbEmailSuggestions.ItemClick      -= EmailList_ItemClick;
                _ttbEmailSuggestions.PreviewKeyDown -= EmailList_PreviewKeyDown;
            }

            if (control.FindChild("EmailList") is ListView ttbList)
            {
                _ttbEmailSuggestions = ttbList;

                _ttbEmailSuggestions.ItemClick      += EmailList_ItemClick;
                _ttbEmailSuggestions.PreviewKeyDown += EmailList_PreviewKeyDown;

                _ttbEmailSuggestions.ItemsSource = _acvEmail;
            }
        }
Пример #25
0
        public void OnXamlRendered(FrameworkElement control)
        {
            _selectedEmails = new ObservableCollection <SampleEmailDataType>();

            if (_ttb != null)
            {
                _ttb.TokenItemAdded    -= TokenItemAdded;
                _ttb.TokenItemRemoving -= TokenItemRemoved;
                _ttb.TextChanged       -= TextChanged;
                _ttb.TokenItemAdding   -= TokenItemCreating;
            }

            if (control.FindChildByName("TokenBox") is TokenizingTextBox ttb)
            {
                _ttb = ttb;
                _ttb.TokenItemAdded    += TokenItemAdded;
                _ttb.TokenItemRemoving += TokenItemRemoved;
                _ttb.TextChanged       += TextChanged;
                _ttb.TokenItemAdding   += TokenItemCreating;

                _acv.Filter = item => !_ttb.Items.Contains(item) && (item as SampleDataType).Text.Contains(_ttb.Text, System.StringComparison.CurrentCultureIgnoreCase);

                _ttb.SuggestedItemsSource = _acv;
            }

            // For the Email Selection control
            if (_ttbEmail != null)
            {
                _ttbEmail.ItemClick        -= EmailTokenItemClick;
                _ttbEmail.TokenItemAdding  -= EmailTokenItemAdding;
                _ttbEmail.TokenItemAdded   -= EmailTokenItemAdded;
                _ttbEmail.TokenItemRemoved -= EmailTokenItemRemoved;
                _ttbEmail.TextChanged      -= EmailTextChanged;
                _ttbEmail.PreviewKeyDown   -= EmailPreviewKeyDown;
            }

            if (control.FindChildByName("TokenBoxEmail") is TokenizingTextBox ttbEmail)
            {
                _ttbEmail = ttbEmail;

                _ttbEmail.ItemsSource       = _selectedEmails;
                _ttbEmail.ItemClick        += EmailTokenItemClick;
                _ttbEmail.TokenItemAdding  += EmailTokenItemAdding;
                _ttbEmail.TokenItemAdded   += EmailTokenItemAdded;
                _ttbEmail.TokenItemRemoved += EmailTokenItemRemoved;
                _ttbEmail.TextChanged      += EmailTextChanged;
                _ttbEmail.PreviewKeyDown   += EmailPreviewKeyDown;

                _acvEmail.Filter = item => !_ttbEmail.Items.Contains(item) && (item as SampleEmailDataType).DisplayName.Contains(_ttbEmail.Text, System.StringComparison.CurrentCultureIgnoreCase);
            }

            if (_ttbEmailSuggestions != null)
            {
                _ttbEmailSuggestions.ItemClick      -= EmailList_ItemClick;
                _ttbEmailSuggestions.PreviewKeyDown -= EmailList_PreviewKeyDown;
            }

            if (control.FindChildByName("EmailList") is ListView ttbList)
            {
                _ttbEmailSuggestions = ttbList;

                _ttbEmailSuggestions.ItemClick      += EmailList_ItemClick;
                _ttbEmailSuggestions.PreviewKeyDown += EmailList_PreviewKeyDown;

                _ttbEmailSuggestions.ItemsSource = _acvEmail;
            }

            if (_ttbEmailClear != null)
            {
                _ttbEmailClear.Click -= ClearButtonClick;
            }

            if (control.FindChildByName("ClearButton") is Button btn)
            {
                _ttbEmailClear        = btn;
                _ttbEmailClear.Click += ClearButtonClick;
            }

            if (_ttbEmailShowItems != null)
            {
                _ttbEmailShowItems.Click -= ShowButtonClick;
            }

            if (control.FindChildByName("ShowSelectedEmails") is Button showBtn)
            {
                _ttbEmailShowItems        = showBtn;
                _ttbEmailShowItems.Click += ShowButtonClick;
            }
        }