namespace XFEWorkflow.Controls;
public sealed class DetailsWorkspace : Grid
{
public ContentControl Master { get; } = new() { HorizontalContentAlignment = HorizontalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Stretch };
public ContentControl Details { get; } = new() { HorizontalContentAlignment = HorizontalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Stretch };
public PaneSplitter Splitter { get; } = new() { Reverse = true };
private readonly ColumnDefinition detailWidth = new() { Width = new(360) };
private readonly RowDefinition detailHeight = new() { Height = new(280) };
private readonly string key;
private bool? narrow;
public DetailsWorkspace(string key)
{
this.key = key; Children.Add(Master); Children.Add(Splitter); Children.Add(Details);
Microsoft.UI.Xaml.Automation.AutomationProperties.SetName(Splitter, "调整列表与详情大小");
SizeChanged += (_, _) => UpdateLayoutMode(); Loaded += (_, _) => UpdateLayoutMode();
}
private void UpdateLayoutMode()
{
var vertical = ActualWidth < 820;
if (narrow == vertical) { Splitter.ApplyPreferredSize(); return; }
narrow = vertical; ColumnDefinitions.Clear(); RowDefinitions.Clear();
Grid.SetColumn(Master, 0); Grid.SetRow(Master, 0);
if (vertical)
{
RowDefinitions.Add(new()); RowDefinitions.Add(new() { Height = new(8) }); RowDefinitions.Add(detailHeight);
Grid.SetColumn(Splitter, 0); Grid.SetColumn(Details, 0); Grid.SetRow(Splitter, 1); Grid.SetRow(Details, 2); Splitter.Orientation = Orientation.Horizontal;
Splitter.Bind(key + ".height", 280, 140, 500, () => detailHeight.ActualHeight, value => detailHeight.Height = new(value), () => ActualHeight - 160);
}
else
{
ColumnDefinitions.Add(new()); ColumnDefinitions.Add(new() { Width = new(8) }); ColumnDefinitions.Add(detailWidth);
Grid.SetRow(Splitter, 0); Grid.SetRow(Details, 0); Grid.SetColumn(Splitter, 1); Grid.SetColumn(Details, 2); Splitter.Orientation = Orientation.Vertical;
Splitter.Bind(key + ".width", 360, 260, 600, () => detailWidth.ActualWidth, value => detailWidth.Width = new(value), () => ActualWidth - 340);
}
}
}
namespace XFEWorkflow.Controls;
public sealed class DetailsWorkspace : Grid
{
public ContentControl Master { get; } = new() { HorizontalContentAlignment = HorizontalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Stretch };
public ContentControl Details { get; } = new() { HorizontalContentAlignment = HorizontalAlignment.Stretch, VerticalContentAlignment = VerticalAlignment.Stretch };
public PaneSplitter Splitter { get; } = new() { Reverse = true };
private readonly ColumnDefinition detailWidth = new() { Width = new(360) };
private readonly RowDefinition detailHeight = new() { Height = new(280) };
private readonly string key;
private bool? narrow;
public DetailsWorkspace(string key)
{
this.key = key; Children.Add(Master); Children.Add(Splitter); Children.Add(Details);
Microsoft.UI.Xaml.Automation.AutomationProperties.SetName(Splitter, "调整列表与详情大小");
SizeChanged += (_, _) => UpdateLayoutMode(); Loaded += (_, _) => UpdateLayoutMode();
}
private void UpdateLayoutMode()
{
var vertical = ActualWidth < 820;
if (narrow == vertical) { Splitter.ApplyPreferredSize(); return; }
narrow = vertical; ColumnDefinitions.Clear(); RowDefinitions.Clear();
Grid.SetColumn(Master, 0); Grid.SetRow(Master, 0);
if (vertical)
{
RowDefinitions.Add(new()); RowDefinitions.Add(new() { Height = new(8) }); RowDefinitions.Add(detailHeight);
Grid.SetColumn(Splitter, 0); Grid.SetColumn(Details, 0); Grid.SetRow(Splitter, 1); Grid.SetRow(Details, 2); Splitter.Orientation = Orientation.Horizontal;
Splitter.Bind(key + ".height", 280, 140, 500, () => detailHeight.ActualHeight, value => detailHeight.Height = new(value), () => ActualHeight - 160);
}
else
{
ColumnDefinitions.Add(new()); ColumnDefinitions.Add(new() { Width = new(8) }); ColumnDefinitions.Add(detailWidth);
Grid.SetRow(Splitter, 0); Grid.SetRow(Details, 0); Grid.SetColumn(Splitter, 1); Grid.SetColumn(Details, 2); Splitter.Orientation = Orientation.Vertical;
Splitter.Bind(key + ".width", 360, 260, 600, () => detailWidth.ActualWidth, value => detailWidth.Width = new(value), () => ActualWidth - 340);
}
}
}