| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- using ivf_tl_Entity.ControlEntity;
- using ivf_tl_Entity.Entity;
- using ivf_tl_Service.HttpProvider;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Diagnostics;
- using System.Diagnostics.Metrics;
- using System.Linq;
- using System.Security.Cryptography.X509Certificates;
- using System.Text;
- using System.Threading.Tasks;
- using System.Transactions;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Controls.Primitives;
- 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;
- using static System.Net.Mime.MediaTypeNames;
- using System.IO;
- using System.Text.Json;
- using ivf_tl_Manage.Win;
- namespace ivf_tl_Manage.UserControls
- {
- /// <summary>
- /// AddressSelectUserControl.xaml 的交互逻辑
- /// </summary>
- public partial class AddressSelectUserControl : UserControl
- {
- public delegate void SelectValueDelegate(string value);
- public event SelectValueDelegate SelectValue;
- public AddressSelectUserControl()
- {
- InitializeComponent();
- string path = AppDomain.CurrentDomain.BaseDirectory + "address.json";
- if (File.Exists(path))
- {
- string JSONstring = File.ReadAllText(path);
- if (string.IsNullOrEmpty(JSONstring))
- {
- new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65, "地址json文件格式错误!").Show();
- return;
- }
- Source = JsonSerializer.Deserialize<ObservableCollection<AddressEntity>>(JSONstring);
- }
- }
- public ObservableCollection<AddressEntity> Source { get; set; }
- public AddressEntity Province { get; set; }
- public AddressEntity City { get; set; }
- public AddressEntity Region { get; set; }
- public string AddressProperty
- {
- get { return (string)GetValue(AddressPropertyProperty); }
- set { SetValue(AddressPropertyProperty, value); }
- }
- // Using a DependencyProperty as the backing store for AddressProperty. This enables animation, styling, binding, etc...
- public static readonly DependencyProperty AddressPropertyProperty =
- DependencyProperty.Register("AddressProperty", typeof(string), typeof(AddressSelectUserControl), new PropertyMetadata(null, new PropertyChangedCallback(AddressPropertyChangedCallback)));
- private static void AddressPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- if (e.NewValue == null) return;
- string newValue = e.NewValue.ToString();
- if (string.IsNullOrEmpty(newValue)) return;
- var source = (AddressSelectUserControl)d;
- source.tb_Defualt.Visibility = Visibility.Collapsed;
- string[] address = newValue.Split("|");
- for (int i = 0; i < address.Length; i++)
- {
- if (i == 0)
- source.tb_Province.Text = address[i];
- if (i == 1)
- source.tb_City.Text = address[i];
- if (i == 2)
- source.tb_Region.Text = address[i];
- if (i == 3)
- source.tb_Street.Text = address[i];
- }
- }
- public int Level
- {
- get { return (int)GetValue(LevelProperty); }
- set { SetValue(LevelProperty, value); }
- }
- // Using a DependencyProperty as the backing store for Level. This enables animation, styling, binding, etc...
- public static readonly DependencyProperty LevelProperty =
- DependencyProperty.Register("Level", typeof(int), typeof(AddressSelectUserControl), new PropertyMetadata(-1, new PropertyChangedCallback(LevelPropertyChangedCallback)));
- private static void LevelPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- int newValue = (int)e.NewValue;
- if (newValue == -1)
- return;
- var source = (AddressSelectUserControl)d;
- switch (newValue)
- {
- case 0:
- #region 省
- source.Retset();
- source.SetTextForeground(source.tb_Province, true);
- var items = source.Source.GroupBy(a => a.pinyinPrefix).ToList();
- source.LoadData(items, 1);
- #endregion
- break;
- case 1:
- #region 城市
- source.Retset();
- source.SetTextForeground(source.tb_Province, false);
- source.SetTextForeground(source.tb_City, true);
- var cityItems = source.Province.children.GroupBy(a => a.pinyinPrefix).ToList();
- source.LoadData(cityItems, 2);
- #endregion
- break;
- case 2:
- #region 区域
- source.Retset();
- source.SetTextForeground(source.tb_City, false);
- source.SetTextForeground(source.tb_Region, true);
- var regionItems = source.City.children.GroupBy(a => a.pinyinPrefix).ToList();
- source.LoadData(regionItems, 3);
- #endregion
- break;
- case 3:
- #region 街道
- source.Retset();
- source.SetTextForeground(source.tb_Region, false);
- source.SetTextForeground(source.tb_Street, true);
- var streetItems = source.Region.children.GroupBy(a => a.pinyinPrefix).ToList();
- source.LoadData(streetItems, 0);
- #endregion
- break;
- default:
- break;
- }
- source.addressPopup.IsOpen = true;
- }
- private void LoadData(List<IGrouping<string, AddressEntity>> items, int type)
- {
- // var items = source.Source.GroupBy(a => a.pinyinPrefix).ToList();
- for (int i = 0; i < items.Count; i++)
- {
- container.RowDefinitions.Add(new RowDefinition());
- var item = items[i];
- TextBlock textBlock = new TextBlock();
- textBlock.Text = item.Key.ToUpper();
- textBlock.SetValue(Grid.RowProperty, i);
- textBlock.SetValue(Grid.ColumnProperty, 0);
- textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#9B9B9B"));
- textBlock.Margin = new Thickness(20, 6, 0, 0);
- textBlock.FontSize = 12;
- textBlock.FontFamily = tb_Defualt.FontFamily;
- container.Children.Add(textBlock);
- if (item.Count() == 0)
- continue;
- StackPanel stackPanel = new StackPanel();
- //stackPanel.Background = new SolidColorBrush((Colors.Red));
- stackPanel.Margin = new Thickness(3, 1, 0, 0);
- stackPanel.SetValue(Grid.RowProperty, i);
- stackPanel.SetValue(Grid.ColumnProperty, 1);
- stackPanel.Orientation = Orientation.Vertical;
- container.Children.Add(stackPanel);
- foreach (var itemChild in item)
- {
- TextBlock itemTextBlock = new TextBlock();
- itemTextBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D4D4D"));
- itemTextBlock.Margin = new Thickness(0, 5, 0, 0);
- itemTextBlock.FontSize = 12;
- itemTextBlock.FontFamily = tb_Defualt.FontFamily;
- itemTextBlock.FontWeight = FontWeights.Medium;
- itemTextBlock.Text = itemChild.extName;
- itemTextBlock.MouseEnter += ItemTextBlock_MouseEnter;
- itemTextBlock.MouseLeave += ItemTextBlock_MouseLeave;
- itemTextBlock.MouseLeftButtonDown += (s, e) =>
- {
- switch (type)
- {
- case 1:
- Province = itemChild;
- break;
- case 2:
- City = itemChild;
- break;
- case 3:
- Region = itemChild;
- break;
- case 0:
- addressPopup.IsOpen = false;
- break;
- default:
- break;
- }
- SetText(itemChild.extName, itemChild.deep);
- };
- stackPanel.Children.Add(itemTextBlock);
- }
- }
- }
- private void ItemTextBlock_MouseLeave(object sender, MouseEventArgs e)
- {
- TextBlock? textBlock = sender as TextBlock;
- if (textBlock != null)
- textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D4D4D"));
- }
- private void ItemTextBlock_MouseEnter(object sender, MouseEventArgs e)
- {
- TextBlock? textBlock = sender as TextBlock;
- if (textBlock != null)
- textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D75AC"));
- }
- public void Retset()
- {
- container.RowDefinitions.Clear();
- container.ColumnDefinitions.Clear();
- ColumnDefinition one = new ColumnDefinition();
- one.Width = new GridLength(35d);
- container.ColumnDefinitions.Add(one);
- container.ColumnDefinitions.Add(new ColumnDefinition());
- container.Children.Clear();
- }
- public void SetText(string text, int level)
- {
- tb_Defualt.Visibility = Visibility.Collapsed;
- switch (level)
- {
- case 0:
- currentImageState = true;
- ChangeImageState();
- tb_Province.Text = text;
- tb_City.Text = "请选择城市";
- tb_Region.Text = "";
- tb_Street.Text = "";
- break;
- case 1:
- currentImageState = true;
- ChangeImageState();
- tb_City.Text = text;
- tb_Region.Text = "请选择县级";
- tb_Street.Text = "";
- break;
- case 2:
- currentImageState = true;
- ChangeImageState();
- tb_Region.Text = text;
- tb_Street.Text = "请选择街道";
- break;
- case 3:
- currentImageState = true;
- ChangeImageState();
- tb_Street.Text = text;
- AddressProperty = tb_Province.Text + "|" + tb_City.Text + "|" + tb_Region.Text + "|" + tb_Street.Text;
- break;
- default:
- break;
- }
- if (level == 3)
- {
- Level = -1;
- SetTextForeground(tb_Street, false);
- }
- else
- Level = level + 1;
- }
- public void SetTextForeground(TextBlock tb, bool isBlue)
- {
- if (isBlue)
- tb.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D75AC"));
- else
- tb.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D4D4D"));
- }
- private void tb_Province_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- tb_Defualt.Visibility = Visibility.Collapsed;
- tb_Province.Text = "请选择省份";
- tb_City.Text = "";
- tb_Region.Text = "";
- tb_Street.Text = "";
- Level = 0;
- e.Handled = true;
- }
- private void tb_City_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- tb_City.Text = "请选择城市";
- tb_Region.Text = "";
- tb_Street.Text = "";
- Level = 1;
- e.Handled = true;
- }
- private void tb_Region_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- tb_Region.Text = "请选择县级";
- tb_Street.Text = "";
- Level = 2;
- e.Handled = true;
- }
- private void tb_Street_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- tb_Street.Text = "请选择街道";
- Level = 3;
- e.Handled = true;
- }
- private void tb_Defualt_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- //tb_Defualt.Visibility = Visibility.Collapsed;
- //tb_Province.Text = "请选择省份";
- //Level = 0;
- }
- private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- tb_Defualt.Visibility = Visibility.Collapsed;
- tb_Province.Text = "请选择省份";
- tb_City.Text = "";
- tb_Region.Text = "";
- tb_Street.Text = "";
- Level = 0;
- }
- private void ChangeImageState()
- {
- if (currentImageState)
- img.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/closeX.png", UriKind.Absolute));
- else
- img.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/PullDownBlueIcon.png", UriKind.Absolute));
- }
- private bool currentImageState = false;
- private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- e.Handled = true;
- }
- private void img_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- if (Level == -1 && addressPopup.IsOpen)
- {
- currentImageState = true;
- ChangeImageState();
- }
- else
- {
- currentImageState = false;
- ChangeImageState();
- }
- }
- }
- }
|