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); } }