using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using BeWo.Core; namespace BeWo.View.Controls { /// /// Interaktionslogik für ComboBoxTreeViewControlV2.xaml /// public partial class ComboBoxTreeViewControlV2 : UserControl { public List TreeViewSourceList { get { return (List)GetValue(ListProperty); } set { SetValue(ListProperty, value); ShowCheckedValues(); } } public double ParentWindowHeight { get { return (double)GetValue(ParentWindowHeightProperty); } set { SetValue(ParentWindowHeightProperty, value); } } public static readonly DependencyProperty ParentWindowHeightProperty = DependencyProperty.Register("ParentWindowHeight", typeof(double), typeof(ComboBoxTreeViewControlV2), new FrameworkPropertyMetadata(500.0)); public static readonly DependencyProperty ListProperty = DependencyProperty.Register("TreeViewSourceList", typeof(List), typeof(ComboBoxTreeViewControlV2), new FrameworkPropertyMetadata(new List())); public ComboBoxTreeViewControlV2() { InitializeComponent(); DataContext = this; } private void ShowCheckedValues() { string ToolTipString = string.Empty; TreeViewSourceList.Aggregate(string.Empty,(current1, item) =>item.Children.Where(item2 => item2.IsChecked).Aggregate(current1,(current, item2) =>current + (item2.Name + "; "))); bool allSelected = true; bool noneSelected = true; foreach (var item in TreeViewSourceList) { if (item.IsChecked) noneSelected = false; else allSelected = false; bool allSubselected = true; bool noneSubselected = true; string children = string.Empty; foreach (var child in item.Children) { if (child.IsChecked) { noneSelected = false; noneSubselected = false; children += string.Format("{0}; ", child.Name); } else { allSelected = false; allSubselected = false; } } if (allSubselected && item.Children.Count > 0) item.IsChecked = true; if (noneSubselected && item.Children.Count > 0) item.IsChecked = false; if (!allSubselected) ToolTipString += children; else if(item.IsChecked) ToolTipString += string.Format("{0}; ", item.Name); } if (allSelected) ToolTipString = "Alle"; else if (noneSelected) ToolTipString = string.Empty; DeSelectAllCheckBox.IsChecked = allSelected; Imitationheader.Text = ToolTipString; if (string.IsNullOrWhiteSpace(ToolTipString)) { Imitationheader.ToolTip = null; return; } // Formatierung des Tooltips string[] splittedToolTip = ToolTipString.Split(';'); ToolTipString = string.Empty; foreach (var item in splittedToolTip.Where(x => x != " ")) { ToolTipString += item.Trim(' '); if (splittedToolTip.Where(x => x != " ").ToList().IndexOf(item) < (splittedToolTip.Count(x => x != " ") - 1)) ToolTipString += "\n"; } Imitationheader.ToolTip = ToolTipString; } private void OpenPopUpBtnClick(object sender, EventArgs e) { openPopup(); } private void openPopup() { TreeViewPopup.Placement = PlacementMode.RelativePoint; TreeViewPopup.PlacementTarget = Imitationheader; TreeViewPopup.VerticalOffset = Imitationheader.Height; TreeViewPopup.HorizontalOffset = 0; TreeViewPopup.MinWidth = Imitationheader.Width; TreeViewPopup.IsOpen = true; OpenPopUpBtn.IsEnabled = false; } private void PopUpClosedEvent(object sender, EventArgs eventArgs) { ShowCheckedValues(); cbtv_search.Text = string.Empty; OpenPopUpBtn.IsEnabled = true; } private void ApplyBtnClose(object sender, EventArgs e) { TreeViewPopup.IsOpen = false; } public void ResetControl() { TreeViewSourceList = new List(); Imitationheader.Text = string.Empty; Imitationheader.ToolTip = null; DeSelectAllCheckBox.IsChecked = false; } private void Tree1_OnLoaded(object sender, RoutedEventArgs e) { if (ParentWindowHeight >= TreeViewPopup.VerticalOffset) TreeViewPopup.MaxHeight = ParentWindowHeight - TreeViewPopup.VerticalOffset - ParentWindowHeight / 4; } private void Bd_OnClick(object sender, RoutedEventArgs e) { ShowCheckedValues(); } private void DeSelectAllOnClick(object sender, RoutedEventArgs e) { var cb = (CheckBox) sender; if (!cb.IsChecked.HasValue) return; foreach (var item in TreeViewSourceList) { item.IsChecked = cb.IsChecked.Value; foreach(var item2 in item.Children) item2.IsChecked = cb.IsChecked.Value; } ShowCheckedValues(); } private void BdText_OnMouseDown(object sender, MouseButtonEventArgs e) { var TreeItem = ((TextBlock)sender).Tag as ServiceCategoryTreeItem; TreeItem.IsChecked = !TreeItem.IsChecked; ShowCheckedValues(); } } }