private void RemoveBoxForFace(PhotoFace face)
        {
            if (face == null)
            {
                return;
            }

            UIElement element;

            _facePanels.TryGetValue(face, out element);

            if (element != null)
            {
                FaceCanvas.Children.Remove(element);
                _facePanels.Remove(face);
            }
        }
        private async void NameBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
        {
            sender.IsEnabled = false;

            PhotoFace person = sender.DataContext as PhotoFace;


            if (sender.Text != person.Name)
            {
                var stream = await _file.OpenReadAsync();

                PhotoFace newPerson = new PhotoFace();
                newPerson.Name       = sender.Text;
                newPerson.Rect       = person.Rect;
                newPerson.Identified = true;

                var knownPerson = FaceAPI.Instance.KnownPeople.Where(p => p.Name == sender.Text).FirstOrDefault();
                if (knownPerson != null)
                {
                    newPerson.PersonId = knownPerson.PersonId;
                }

                await FaceAPI.Instance.AddImageForPerson(newPerson, stream);


                var newList = _photo.People.ToList();
                newList.Remove(person);
                newList.Add(newPerson);

                _photo.People = newList;

                RemoveBoxForFace(person);
                _knownFaces.Add(newPerson);
            }

            sender.IsEnabled = true;
        }
        private UIElement AddBoxForFace(PhotoFace face)
        {
            var scale = FaceCanvas.ActualWidth / Math.Min(_canvasImage.GetBounds(ImageCanvas).Width, _canvasImage.GetBounds(ImageCanvas).Height);

            var width  = face.Rect.Width * scale;
            var height = face.Rect.Height * scale;
            var top    = face.Rect.Top * scale;
            var left   = face.Rect.Left * scale;

            if (face.Identified)
            {
                var border = new Border()
                {
                    Width = width > 200 ? width : double.NaN,
                };

                border.SetValue(Canvas.TopProperty, (top + height));
                border.SetValue(Canvas.LeftProperty, left);

                var background = new Border()
                {
                    Background          = new SolidColorBrush(Color.FromArgb(160, 0, 0, 0)),
                    Padding             = new Thickness(8),
                    CornerRadius        = new CornerRadius(10),
                    HorizontalAlignment = HorizontalAlignment.Center
                };

                border.Child = background;

                var textblock = new TextBlock()
                {
                    Text     = face.Name,
                    FontSize = 12
                };

                background.Child = textblock;

                FaceCanvas.Children.Add(border);
                if (!_facePanels.ContainsKey(face))
                {
                    _facePanels.Add(face, border);
                }

                return(border);
            }
            else
            {
                var panel = new StackPanel()
                {
                    //Width = face.Rect.Width
                };

                panel.SetValue(Canvas.TopProperty, top);
                panel.SetValue(Canvas.LeftProperty, left);

                var rect = new Rectangle()
                {
                    Height              = height,
                    Width               = width,
                    Stroke              = (App.Current.Resources["BrandColor"]) as SolidColorBrush,
                    StrokeThickness     = 4,
                    HorizontalAlignment = HorizontalAlignment.Left
                };

                var nameBox = new AutoSuggestBox()
                {
                    Text            = face.Identified ? face.Name : "",
                    PlaceholderText = !face.Identified ? "who is this?" : "",
                    Width           = width > 200 ? width : 200,
                    QueryIcon       = new SymbolIcon(Symbol.Go),
                    DataContext     = face
                };

                nameBox.TextChanged    += NameBox_TextChanged;
                nameBox.QuerySubmitted += NameBox_QuerySubmitted;

                panel.Children.Add(rect);
                panel.Children.Add(nameBox);
                FaceCanvas.Children.Add(panel);

                _facePanels.Add(face, panel);

                return(panel);
            }
        }