using ivf_tl_CustomControls; using ivf_tl_Entity.Entity.Mark; using ivf_tl_Entity.Response; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace ivf_tl_Manage.UserControls { /// /// MarkDetailUserControl.xaml 的交互逻辑 /// public partial class MarkDetailUserControl : UserControl { public event Action SaveMarkEvent; public event Action BeforeClickEvent; private bool isOne = true; public MarkDetailUserControl() { InitializeComponent(); } private void Cancel_Click(object sender, RoutedEventArgs e) { } private void Ok_Click(object sender, RoutedEventArgs e) { SaveMarkEvent?.Invoke(MarkSource); } public MarkEntity MarkSource { get { return (MarkEntity)GetValue(MarkSourceProperty); } set { SetValue(MarkSourceProperty, value); } } // Using a DependencyProperty as the backing store for MarkSource. This enables animation, styling, binding, etc... public static readonly DependencyProperty MarkSourceProperty = DependencyProperty.Register("MarkSource", typeof(MarkEntity), typeof(MarkDetailUserControl), new PropertyMetadata(null, new PropertyChangedCallback(MarkSourcePropertyChangedCallback))); private static void MarkSourcePropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (!(d is MarkDetailUserControl source)) return; if (e.NewValue == null) { source._markNewView_Grid.Children.Clear(); return; } if (!(e.NewValue is MarkEntity currMarkNew)) { source._markNewView_Grid.Children.Clear(); return; } source.isOne = true; source._markNewView_Grid.Children.Clear(); currMarkNew.ChildrenGrid = source._markNewView_Grid; source.AllAddMark(currMarkNew); } public void AllAddMark(MarkEntity currMarkNew) { if (currMarkNew.children == null) return; var childrenHaveChildren = currMarkNew.children.FirstOrDefault(x => x.child == 1); if (childrenHaveChildren == null) { AddNoChildrenMarkNew(currMarkNew); } else { foreach (var markNew in currMarkNew.children) { markNew.ParentGrid = currMarkNew.ChildrenGrid; AddHaveChildrenMarkNew(markNew); AllAddMark(markNew); } } } /// /// 添加节点入口 /// /// public void AddMark(MarkEntity currMarkNew) { if (currMarkNew.children == null) return; var childrenHaveChildren = currMarkNew.children.FirstOrDefault(x => x.child == 1); if (childrenHaveChildren == null) { AddNoChildrenMarkNew(currMarkNew); } else { foreach (var markNew in currMarkNew.children) { markNew.ParentGrid = currMarkNew.ChildrenGrid; AddHaveChildrenMarkNew(markNew); } } } /// /// 添加存在下级节点的节点 /// /// private void AddHaveChildrenMarkNew(MarkEntity markNew) { Grid parentGrid = markNew.ParentGrid; if (parentGrid == null) { return; } RowDefinition rowDefinition = new RowDefinition(); rowDefinition.Height = GridLength.Auto; parentGrid.RowDefinitions.Add(rowDefinition); int num = parentGrid.RowDefinitions.Count - 1; Grid itemGrid = new Grid(); parentGrid.Children.Add(itemGrid); Grid.SetRow(itemGrid, num); markNew.ChildrenGrid = itemGrid; itemGrid.Tag = true; RowDefinition itemRowDefinition = new RowDefinition(); itemGrid.RowDefinitions.Add(itemRowDefinition); itemRowDefinition.Height = GridLength.Auto; Border border = new Border(); itemGrid.Children.Add(border); Grid.SetRow(border, 0); border.Tag = markNew; border.Background = new SolidColorBrush(Colors.Transparent); border.MouseUp += ShrinkOrExpandMouseup; StackPanel stackPanel = new StackPanel(); border.Child = stackPanel; stackPanel.Orientation = Orientation.Horizontal; //stackPanel.Background = new SolidColorBrush(Colors.LightGreen); //stackPanel.Background= new SolidColorBrush(Colors.LightGray); if (isOne) { isOne = false; stackPanel.Margin = new Thickness(0); } else { stackPanel.Margin = new Thickness(0,15,0,0); } TextBlock textBlock = new TextBlock(); Grid canvas = new Grid(); canvas.Width = 20; canvas.Height = 20; canvas.Margin = new Thickness(20, 0, 5, 0); Image image = new Image(); canvas.Children.Add(image); stackPanel.Children.Add(canvas); stackPanel.Children.Add(textBlock); image.Width = 20; image.Height = 10; markNew.FoldImage = image; textBlock.Text = markNew.name; image.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/foldMark.png", UriKind.RelativeOrAbsolute)); //unfoldMark if (markNew.children.Any()) { textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D4D4D")); } else { //image.Source = new BitmapImage(new Uri("/Image/unfoldMarkNoHave.png", UriKind.RelativeOrAbsolute)); textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#707070")); } textBlock.FontSize = 20; textBlock.FontWeight = FontWeights.Medium; } /// /// 添加无子节点的节点 /// private void AddNoChildrenMarkNew(MarkEntity markNew) { try { var parentGrid = markNew.ChildrenGrid; if (parentGrid == null) { return; } RowDefinition rowDefinition = new RowDefinition(); rowDefinition.Height = GridLength.Auto; parentGrid.RowDefinitions.Add(rowDefinition); int num = parentGrid.RowDefinitions.Count - 1; Border border = new Border(); border.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ECEEF2")); parentGrid.Children.Add(border); Grid.SetRow(border, num); border.CornerRadius = new CornerRadius(6); border.Margin = new Thickness(20, 10, 15, 0); double xuanWidth = 110; WrapPanel borderGrid = new WrapPanel(); border.Child = borderGrid; int i = 0; foreach (var item in markNew.children) { i++; RadioButtonHaveFrame radioButton = new RadioButtonHaveFrame(); borderGrid.Children.Add(radioButton); radioButton.FontWeight= FontWeights.Medium; radioButton.Width = xuanWidth; radioButton.FontSize = 16.5; radioButton.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#9B9B9B")); radioButton.Content = item.name; if (i > 3) { radioButton.Margin = new Thickness(10, 0, 0, 10); } else { radioButton.Margin = new Thickness(10, 10, 0, 10); } radioButton.Tag = item; radioButton.CheckImageSource = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/CheckRadioButtonIcon.png", UriKind.Absolute)); if (markNew.CurrentValue != null && markNew.CurrentValue.id == item.id) { markNew.CurrentValue = item; radioButton.IsChecked = true; } radioButton.Checked += (sender, arg) => { BeforeClickEvent?.Invoke(); markNew.CurrentValue = item; //获取选定的值 }; } } catch (Exception ex) { } } /// /// 标记展开或者收缩 /// /// /// /// private void ShrinkOrExpandMouseup(object sender, MouseButtonEventArgs e) { BeforeClickEvent?.Invoke(); if (!(sender is Border border)) return; if (!(border.Tag is MarkEntity markNew)) return; if (markNew.ChildrenGrid == null) return; if (!markNew.children.Any()) { return; } bool newTag = !bool.Parse(markNew.ChildrenGrid.Tag.ToString()); markNew.ChildrenGrid.Tag = newTag; if (newTag) { Expand(markNew); } else { Shrink(markNew); } } /// /// 展开 /// /// private void Expand(MarkEntity markNew) { Image image = markNew.FoldImage; AddMark(markNew); if (image != null) { image.Width = 20; image.Height = 10; image.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/foldMark.png", UriKind.RelativeOrAbsolute)); } } /// /// 收缩 /// /// private void Shrink(MarkEntity markNew) { Image image = markNew.FoldImage; if (markNew.ChildrenGrid.RowDefinitions.Count > 1) { if (image != null) { image.Width = 10; image.Height = 20; image.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/unfoldMark.png", UriKind.RelativeOrAbsolute)); } int k = markNew.ChildrenGrid.RowDefinitions.Count; for (int i = 1; i < k; i++) { markNew.ChildrenGrid.Children.RemoveAt(1); markNew.ChildrenGrid.RowDefinitions.RemoveAt(1); } } } private void ScrollViewer_ManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } private void GetLeafParentNodeList(MarkEntity markEntity, List list) { if (markEntity.child != 1) return; if (markEntity.children != null && markEntity.children.Any()) { var a = markEntity.children.FirstOrDefault(x => x.child == 1); if (a == null) { list.Add(markEntity); return; } foreach (var item in markEntity.children) { GetLeafParentNodeList(item, list); } return; } list.Add(markEntity); } } }