* feat: add ColumnWrapPanel. * feat: add Descriptions and DescriptionsItem controls * WIP: extract a LabeledContentControl for this particular need. * wip. * feat: setup demo. fix various initial status issue. * fix: fix a layout issue. * feat: improve demo. * feat: update demo. * fix: remove a redundant calculation. * feat: update per copilot feedback. * feat: add tests, fix a calculation issue. * feat: refactor to change the default label and value binding assignment logic. * feat: introduce orientation. * misc: format codes. * feat: clarify LabelPosition property. * feat: extract Font resources. * revert AvatarDemo. * feat: assign specific value to Font resources for testing. * misc: resolve copilot comment. --------- Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
183 lines
5.2 KiB
C#
183 lines
5.2 KiB
C#
using Avalonia.Controls;
|
|
using Avalonia.Data;
|
|
using Avalonia.Headless.XUnit;
|
|
using Avalonia.LogicalTree;
|
|
using Ursa.Common;
|
|
using Ursa.Controls;
|
|
|
|
namespace HeadlessTest.Ursa.Controls.DescriptionTests;
|
|
|
|
public class Test
|
|
{
|
|
[AvaloniaFact]
|
|
public void Descriptions_LabelPosition_Propagates_To_DescriptionItems()
|
|
{
|
|
var descriptions = new Descriptions
|
|
{
|
|
LabelPosition = Position.Left,
|
|
ItemsSource = new[]
|
|
{
|
|
new { Label = "Name", Content = "John Doe" },
|
|
new { Label = "Age", Content = "30" }
|
|
},
|
|
LabelMemberBinding = new Binding("Label"),
|
|
};
|
|
var window = new Window
|
|
{
|
|
Content = descriptions
|
|
};
|
|
|
|
window.Show();
|
|
|
|
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
|
foreach (var item in items)
|
|
{
|
|
Assert.Equal(Position.Left, item.LabelPosition);
|
|
}
|
|
|
|
descriptions.LabelPosition = Position.Top;
|
|
foreach (var item in items)
|
|
{
|
|
Assert.Equal(Position.Top, item.LabelPosition);
|
|
}
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Inline_Descriptions_LabelPosition_Overrides_Parent_Descriptions()
|
|
{
|
|
var descriptions = new Descriptions
|
|
{
|
|
LabelPosition = Position.Left,
|
|
Items =
|
|
{
|
|
new DescriptionsItem()
|
|
{
|
|
Label = "Name",
|
|
Content = "John Doe",
|
|
LabelPosition = Position.Top
|
|
},
|
|
new DescriptionsItem()
|
|
{
|
|
Label = "Age",
|
|
Content = "30",
|
|
}
|
|
}
|
|
};
|
|
var window = new Window
|
|
{
|
|
Content = descriptions
|
|
};
|
|
|
|
window.Show();
|
|
|
|
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
|
Assert.Equal(Position.Top, items[0].LabelPosition);
|
|
Assert.Equal(Position.Left, items[1].LabelPosition);
|
|
|
|
descriptions.LabelPosition = Position.Top;
|
|
Assert.Equal(Position.Top, items[0].LabelPosition);
|
|
Assert.Equal(Position.Top, items[1].LabelPosition);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Descriptions_ItemAlignment_Propagates_To_DescriptionItems()
|
|
{
|
|
var descriptions = new Descriptions
|
|
{
|
|
LabelPosition = Position.Left,
|
|
ItemsSource = new[]
|
|
{
|
|
new { Label = "Name", Content = "John Doe" },
|
|
new { Label = "Age", Content = "30" }
|
|
},
|
|
ItemAlignment = ItemAlignment.Center,
|
|
LabelMemberBinding = new Binding("Label"),
|
|
};
|
|
var window = new Window
|
|
{
|
|
Content = descriptions
|
|
};
|
|
|
|
window.Show();
|
|
|
|
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
|
foreach (var item in items)
|
|
{
|
|
Assert.Equal(ItemAlignment.Center, item.ItemAlignment);
|
|
}
|
|
|
|
descriptions.ItemAlignment = ItemAlignment.Justify;
|
|
foreach (var item in items)
|
|
{
|
|
Assert.Equal(ItemAlignment.Justify, item.ItemAlignment);
|
|
}
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Inline_Descriptions_ItemAlignment_Overrides_Parent_Descriptions()
|
|
{
|
|
var descriptions = new Descriptions
|
|
{
|
|
ItemAlignment = ItemAlignment.Center,
|
|
Items =
|
|
{
|
|
new DescriptionsItem()
|
|
{
|
|
Label = "Name",
|
|
Content = "John Doe",
|
|
ItemAlignment = ItemAlignment.Justify
|
|
},
|
|
new DescriptionsItem()
|
|
{
|
|
Label = "Age",
|
|
Content = "30",
|
|
}
|
|
}
|
|
};
|
|
var window = new Window
|
|
{
|
|
Content = descriptions
|
|
};
|
|
|
|
window.Show();
|
|
|
|
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
|
Assert.Equal(ItemAlignment.Justify, items[0].ItemAlignment);
|
|
Assert.Equal(ItemAlignment.Center, items[1].ItemAlignment);
|
|
|
|
descriptions.ItemAlignment = ItemAlignment.Left;
|
|
Assert.Equal(ItemAlignment.Justify, items[0].ItemAlignment);
|
|
Assert.Equal(ItemAlignment.Left, items[1].ItemAlignment);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Descriptions_LabelWidth_Propagates_To_DescriptionItems()
|
|
{
|
|
var descriptions = new Descriptions
|
|
{
|
|
LabelWidth = new GridLength(100),
|
|
ItemsSource = new[]
|
|
{
|
|
new { Label = "Name", Content = "John Doe" },
|
|
new { Label = "Age", Content = "30" }
|
|
},
|
|
LabelMemberBinding = new Binding("Label"),
|
|
};
|
|
var window = new Window
|
|
{
|
|
Content = descriptions
|
|
};
|
|
window.Show();
|
|
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
|
foreach (var item in items)
|
|
{
|
|
Assert.Equal(100, item.LabelWidth);
|
|
}
|
|
|
|
descriptions.LabelWidth = new GridLength(150);
|
|
foreach (var item in items)
|
|
{
|
|
Assert.Equal(150, item.LabelWidth);
|
|
}
|
|
}
|
|
} |