60 lines
1.6 KiB
C#
60 lines
1.6 KiB
C#
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace Explorer.App;
|
|
|
|
public static class DetailsColumnLayout
|
|
{
|
|
public static readonly DependencyProperty ShowFreeSpaceProperty =
|
|
DependencyProperty.RegisterAttached(
|
|
"ShowFreeSpace",
|
|
typeof(bool),
|
|
typeof(DetailsColumnLayout),
|
|
new PropertyMetadata(true, OnShowFreeSpaceChanged));
|
|
|
|
public static void SetShowFreeSpace(ListView element, bool value)
|
|
=> element.SetValue(ShowFreeSpaceProperty, value);
|
|
|
|
public static bool GetShowFreeSpace(ListView element)
|
|
=> (bool)element.GetValue(ShowFreeSpaceProperty);
|
|
|
|
private static void OnShowFreeSpaceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is ListView list)
|
|
{
|
|
Apply(list);
|
|
list.Loaded -= OnLoaded;
|
|
list.Loaded += OnLoaded;
|
|
}
|
|
}
|
|
|
|
private static void OnLoaded(object sender, RoutedEventArgs e)
|
|
{
|
|
if (sender is ListView list)
|
|
{
|
|
Apply(list);
|
|
}
|
|
}
|
|
|
|
private static void Apply(ListView list)
|
|
{
|
|
if (list.View is not GridView view)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var show = GetShowFreeSpace(list);
|
|
foreach (var column in view.Columns)
|
|
{
|
|
var title = column.Header?.ToString() ?? "";
|
|
title = title.Replace(" ▲", "", StringComparison.Ordinal).Replace(" ▼", "", StringComparison.Ordinal).Trim();
|
|
if (title == "Free space")
|
|
{
|
|
column.Width = show ? 110 : 0;
|
|
}
|
|
}
|
|
|
|
ListViewLayout.Stretch(list);
|
|
}
|
|
}
|