private async Task AddToken(object data) { if (data is string str && TokenItemCreating != null) { var ticea = new TokenItemCreatingEventArgs(str); await TokenItemCreating.InvokeAsync(this, ticea); if (ticea.Cancel) { return; } if (ticea.Item != null) { data = ticea.Item; // Transformed by event implementor } } var item = new TokenizingTextBoxItem() { Content = data, ContentTemplateSelector = TokenItemTemplateSelector, ContentTemplate = TokenItemTemplate, Style = TokenItemStyle }; item.Click += TokenizingTextBoxItem_Click; // TODO: Wonder if this needs to be in a PrepareContainerForItemOverride? item.ClearClicked += TokenizingTextBoxItem_ClearClicked; item.KeyUp += TokenizingTextBoxItem_KeyUp; var removeMenuItem = new MenuFlyoutItem { Text = StringExtensions.GetLocalized("WindowsCommunityToolkit_TokenizingTextBoxItem_MenuFlyout_Remove", "Microsoft.Toolkit.Uwp.UI.Controls/Resources") }; removeMenuItem.Click += (s, e) => TokenizingTextBoxItem_ClearClicked(item, null); var menuFlyout = new MenuFlyout(); menuFlyout.Items.Add(removeMenuItem); item.ContextFlyout = menuFlyout; var i = _wrapPanel.Children.Count - 1; _wrapPanel.Children.Insert(i, item); TokenizedItemsInternal.Add(item); TokenItemAdded?.Invoke(this, item); }
private void RemoveToken(TokenizingTextBoxItem item) { var tirea = new TokenItemRemovedEventArgs(item?.Content, item); TokenItemRemoved?.Invoke(this, tirea); if (tirea.Cancel) { return; } SelectedItemsInternal.Remove(item); TokenizedItemsInternal.Remove(item); var itemIndex = Math.Max(_wrapPanel.Children.IndexOf(item) - 1, 0); _wrapPanel.Children.Remove(item); if (_wrapPanel.Children[itemIndex] is Control control) { control.Focus(FocusState.Programmatic); } }
/// <summary> /// Initializes a new instance of the <see cref="TokenizingTextBox"/> class. /// </summary> public TokenizingTextBox() { DefaultStyleKey = typeof(TokenizingTextBox); TokenizedItemsInternal.Clear(); }