void ShellListView_OnListViewColumnDropDownClicked(object sender, ListViewColumnDropDownArgs e) { //TODO: Add Events for when an item's check has been changed var packUri = "pack://application:,,,/BetterExplorer;component/Images/stack16.png"; var menu = new ListviewColumnDropDown() { Placement = PlacementMode.AbsolutePoint, HorizontalOffset = e.ActionPoint.X, VerticalOffset = e.ActionPoint.Y, IsOpen = true, StaysOpen = true, }; var Things = new List<string>(); var SelectedColumn = this._ShellListView.Collumns[e.ColumnIndex]; if (SelectedColumn.CollumnType == typeof(String)) { Things.AddRange(new[] { "0 - 9", "A - H", "I - P", "Q - Z", "Other" }); } else if (SelectedColumn.CollumnType == typeof(DateTime)) { var Container = new ItemsControl(); Container.Items.Add(new MenuItem() { Icon = new ImageSourceConverter().ConvertFromString(packUri) as ImageSource, Header = "Select a date or date range:", HorizontalContentAlignment = HorizontalAlignment.Stretch, HorizontalAlignment = HorizontalAlignment.Stretch, IsCheckable = true, StaysOpenOnClick = true }); Container.Items.Add(new Calendar() { SelectionMode = CalendarSelectionMode.SingleRange, Margin = new Thickness(30, 0, 0, 0) }); menu.AddItem(Container); Things.AddRange(new[] { "A long time ago", "Earlier this year", "Earlier this month", "Last week", "Today" }); } else if (SelectedColumn.CollumnType == typeof(long)) { Things.AddRange(new[] { "Tiny (0 - 10 KB)", "Small (10 - 100 KB)", "Medium (100 KB - 1 MB)", "Large (1 - 16 MB)", "Huge (16 - 128 MB)", "Unspecified" }); } else if (SelectedColumn.CollumnType == typeof(Type)) { var distictItems = this._ShellListView.Items.Select(s => s.GetPropertyValue(SelectedColumn.pkey, SelectedColumn.CollumnType).Value).Distinct().Cast<String>().ToArray().OrderBy(o => o); Things.AddRange(distictItems); } foreach (var item in Things) { var mnuItem = new MenuItem() { Icon = new ImageSourceConverter().ConvertFromString(packUri) as ImageSource, IsCheckable = true, Header = item, HorizontalContentAlignment = HorizontalAlignment.Stretch, HorizontalAlignment = HorizontalAlignment.Stretch, StaysOpenOnClick = true }; mnuItem.Click += new RoutedEventHandler(delegate (object s, RoutedEventArgs re) { var over = Mouse.DirectlyOver; if (!(over is Image)) { menu.IsOpen = false; } }); menu.AddItem(mnuItem); } }