Skip to content

Commit e9fd76c

Browse files
author
reunion-maestro-bot
committed
Merged PR 14420380: Update experimental FlowLayout properties to align to released LinedFlowLayout, see discussion #10858
Syncing content from committish 938d1114eaf090e2abc6e187f789c756957701b0
1 parent 896c38d commit e9fd76c

File tree

15 files changed

+76
-89
lines changed

15 files changed

+76
-89
lines changed

src/controls/dev/AnnotatedScrollBar/TestUI/AnnotatedScrollBarSummaryPage.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
HorizontalAlignment="Right">
6767
<controls:ItemsRepeater.Layout>
6868
<controls:FlowLayout/>
69-
<!--<controls:FlowLayout MinColumnSpacing="10" MinRowSpacing="20"/>-->
69+
<!--<controls:FlowLayout MinItemSpacing="10" LineSpacing="20"/>-->
7070
</controls:ItemsRepeater.Layout>
7171
</controls:ItemsRepeater>
7272
</controls:ScrollView>

src/controls/dev/Generated/FlowLayout.properties.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ namespace winrt::Microsoft::UI::Xaml::Controls
1414
#include "FlowLayout.g.cpp"
1515

1616
GlobalDependencyProperty FlowLayoutProperties::s_LineAlignmentProperty{ nullptr };
17-
GlobalDependencyProperty FlowLayoutProperties::s_MinColumnSpacingProperty{ nullptr };
18-
GlobalDependencyProperty FlowLayoutProperties::s_MinRowSpacingProperty{ nullptr };
17+
GlobalDependencyProperty FlowLayoutProperties::s_LineSpacingProperty{ nullptr };
18+
GlobalDependencyProperty FlowLayoutProperties::s_MinItemSpacingProperty{ nullptr };
1919
GlobalDependencyProperty FlowLayoutProperties::s_OrientationProperty{ nullptr };
2020

2121
FlowLayoutProperties::FlowLayoutProperties()
@@ -36,27 +36,27 @@ void FlowLayoutProperties::EnsureProperties()
3636
ValueHelper<winrt::FlowLayoutLineAlignment>::BoxValueIfNecessary(winrt::FlowLayoutLineAlignment::Start),
3737
winrt::PropertyChangedCallback(&OnLineAlignmentPropertyChanged));
3838
}
39-
if (!s_MinColumnSpacingProperty)
39+
if (!s_LineSpacingProperty)
4040
{
41-
s_MinColumnSpacingProperty =
41+
s_LineSpacingProperty =
4242
InitializeDependencyProperty(
43-
L"MinColumnSpacing",
43+
L"LineSpacing",
4444
winrt::name_of<double>(),
4545
winrt::name_of<winrt::FlowLayout>(),
4646
false /* isAttached */,
4747
ValueHelper<double>::BoxValueIfNecessary(0.0),
48-
winrt::PropertyChangedCallback(&OnMinColumnSpacingPropertyChanged));
48+
winrt::PropertyChangedCallback(&OnLineSpacingPropertyChanged));
4949
}
50-
if (!s_MinRowSpacingProperty)
50+
if (!s_MinItemSpacingProperty)
5151
{
52-
s_MinRowSpacingProperty =
52+
s_MinItemSpacingProperty =
5353
InitializeDependencyProperty(
54-
L"MinRowSpacing",
54+
L"MinItemSpacing",
5555
winrt::name_of<double>(),
5656
winrt::name_of<winrt::FlowLayout>(),
5757
false /* isAttached */,
5858
ValueHelper<double>::BoxValueIfNecessary(0.0),
59-
winrt::PropertyChangedCallback(&OnMinRowSpacingPropertyChanged));
59+
winrt::PropertyChangedCallback(&OnMinItemSpacingPropertyChanged));
6060
}
6161
if (!s_OrientationProperty)
6262
{
@@ -74,8 +74,8 @@ void FlowLayoutProperties::EnsureProperties()
7474
void FlowLayoutProperties::ClearProperties()
7575
{
7676
s_LineAlignmentProperty = nullptr;
77-
s_MinColumnSpacingProperty = nullptr;
78-
s_MinRowSpacingProperty = nullptr;
77+
s_LineSpacingProperty = nullptr;
78+
s_MinItemSpacingProperty = nullptr;
7979
s_OrientationProperty = nullptr;
8080
}
8181

@@ -87,15 +87,15 @@ void FlowLayoutProperties::OnLineAlignmentPropertyChanged(
8787
winrt::get_self<FlowLayout>(owner)->OnPropertyChanged(args);
8888
}
8989

90-
void FlowLayoutProperties::OnMinColumnSpacingPropertyChanged(
90+
void FlowLayoutProperties::OnLineSpacingPropertyChanged(
9191
winrt::DependencyObject const& sender,
9292
winrt::DependencyPropertyChangedEventArgs const& args)
9393
{
9494
auto owner = sender.as<winrt::FlowLayout>();
9595
winrt::get_self<FlowLayout>(owner)->OnPropertyChanged(args);
9696
}
9797

98-
void FlowLayoutProperties::OnMinRowSpacingPropertyChanged(
98+
void FlowLayoutProperties::OnMinItemSpacingPropertyChanged(
9999
winrt::DependencyObject const& sender,
100100
winrt::DependencyPropertyChangedEventArgs const& args)
101101
{
@@ -124,30 +124,30 @@ winrt::FlowLayoutLineAlignment FlowLayoutProperties::LineAlignment()
124124
return ValueHelper<winrt::FlowLayoutLineAlignment>::CastOrUnbox(static_cast<FlowLayout*>(this)->GetValue(s_LineAlignmentProperty));
125125
}
126126

127-
void FlowLayoutProperties::MinColumnSpacing(double value)
127+
void FlowLayoutProperties::LineSpacing(double value)
128128
{
129129
[[gsl::suppress(con)]]
130130
{
131-
static_cast<FlowLayout*>(this)->SetValue(s_MinColumnSpacingProperty, ValueHelper<double>::BoxValueIfNecessary(value));
131+
static_cast<FlowLayout*>(this)->SetValue(s_LineSpacingProperty, ValueHelper<double>::BoxValueIfNecessary(value));
132132
}
133133
}
134134

135-
double FlowLayoutProperties::MinColumnSpacing()
135+
double FlowLayoutProperties::LineSpacing()
136136
{
137-
return ValueHelper<double>::CastOrUnbox(static_cast<FlowLayout*>(this)->GetValue(s_MinColumnSpacingProperty));
137+
return ValueHelper<double>::CastOrUnbox(static_cast<FlowLayout*>(this)->GetValue(s_LineSpacingProperty));
138138
}
139139

140-
void FlowLayoutProperties::MinRowSpacing(double value)
140+
void FlowLayoutProperties::MinItemSpacing(double value)
141141
{
142142
[[gsl::suppress(con)]]
143143
{
144-
static_cast<FlowLayout*>(this)->SetValue(s_MinRowSpacingProperty, ValueHelper<double>::BoxValueIfNecessary(value));
144+
static_cast<FlowLayout*>(this)->SetValue(s_MinItemSpacingProperty, ValueHelper<double>::BoxValueIfNecessary(value));
145145
}
146146
}
147147

148-
double FlowLayoutProperties::MinRowSpacing()
148+
double FlowLayoutProperties::MinItemSpacing()
149149
{
150-
return ValueHelper<double>::CastOrUnbox(static_cast<FlowLayout*>(this)->GetValue(s_MinRowSpacingProperty));
150+
return ValueHelper<double>::CastOrUnbox(static_cast<FlowLayout*>(this)->GetValue(s_MinItemSpacingProperty));
151151
}
152152

153153
void FlowLayoutProperties::Orientation(winrt::Orientation const& value)

src/controls/dev/Generated/FlowLayout.properties.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@ class FlowLayoutProperties
1212
void LineAlignment(winrt::FlowLayoutLineAlignment const& value);
1313
winrt::FlowLayoutLineAlignment LineAlignment();
1414

15-
void MinColumnSpacing(double value);
16-
double MinColumnSpacing();
15+
void LineSpacing(double value);
16+
double LineSpacing();
1717

18-
void MinRowSpacing(double value);
19-
double MinRowSpacing();
18+
void MinItemSpacing(double value);
19+
double MinItemSpacing();
2020

2121
void Orientation(winrt::Orientation const& value);
2222
winrt::Orientation Orientation();
2323

2424
static winrt::DependencyProperty LineAlignmentProperty() { return s_LineAlignmentProperty; }
25-
static winrt::DependencyProperty MinColumnSpacingProperty() { return s_MinColumnSpacingProperty; }
26-
static winrt::DependencyProperty MinRowSpacingProperty() { return s_MinRowSpacingProperty; }
25+
static winrt::DependencyProperty LineSpacingProperty() { return s_LineSpacingProperty; }
26+
static winrt::DependencyProperty MinItemSpacingProperty() { return s_MinItemSpacingProperty; }
2727
static winrt::DependencyProperty OrientationProperty() { return s_OrientationProperty; }
2828

2929
static GlobalDependencyProperty s_LineAlignmentProperty;
30-
static GlobalDependencyProperty s_MinColumnSpacingProperty;
31-
static GlobalDependencyProperty s_MinRowSpacingProperty;
30+
static GlobalDependencyProperty s_LineSpacingProperty;
31+
static GlobalDependencyProperty s_MinItemSpacingProperty;
3232
static GlobalDependencyProperty s_OrientationProperty;
3333

3434
static void EnsureProperties();
@@ -38,11 +38,11 @@ class FlowLayoutProperties
3838
winrt::DependencyObject const& sender,
3939
winrt::DependencyPropertyChangedEventArgs const& args);
4040

41-
static void OnMinColumnSpacingPropertyChanged(
41+
static void OnLineSpacingPropertyChanged(
4242
winrt::DependencyObject const& sender,
4343
winrt::DependencyPropertyChangedEventArgs const& args);
4444

45-
static void OnMinRowSpacingPropertyChanged(
45+
static void OnMinItemSpacingPropertyChanged(
4646
winrt::DependencyObject const& sender,
4747
winrt::DependencyPropertyChangedEventArgs const& args);
4848

src/controls/dev/ItemsView/TestUI/ItemsViewSummaryPage.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@
185185

186186
<FlowLayout x:Key="flowLayout"
187187
Orientation="Vertical"
188-
MinColumnSpacing="10"
189-
MinRowSpacing="10"/>
188+
MinItemSpacing="10"
189+
LineSpacing="10"/>
190190

191191
<UniformGridLayout x:Key="uniformGridLayout"
192192
MaximumRowsOrColumns="4"

src/controls/dev/Repeater/APITests/FlowLayoutTests.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -665,8 +665,8 @@ public void ValidateFlowLayout()
665665

666666
minItemSpacing = 10;
667667
lineSpacing = 10;
668-
((FlowLayout)panel.Layout).MinRowSpacing = minItemSpacing;
669-
((FlowLayout)panel.Layout).MinColumnSpacing = lineSpacing;
668+
((FlowLayout)panel.Layout).MinItemSpacing = minItemSpacing;
669+
((FlowLayout)panel.Layout).LineSpacing = lineSpacing;
670670
Content.UpdateLayout();
671671
ValidateFlowLayoutChildrenLayoutBounds(om, (i) => panel.Children[i], minItemSpacing, lineSpacing, panel.Children.Count, panel.DesiredSize);
672672
}
@@ -729,8 +729,8 @@ public void ValidateFlowLayoutVaryingHeights()
729729

730730
minItemSpacing = 10;
731731
lineSpacing = 10;
732-
((FlowLayout)panel.Layout).MinRowSpacing = minItemSpacing;
733-
((FlowLayout)panel.Layout).MinColumnSpacing = lineSpacing;
732+
((FlowLayout)panel.Layout).MinItemSpacing = minItemSpacing;
733+
((FlowLayout)panel.Layout).LineSpacing = lineSpacing;
734734
Content.UpdateLayout();
735735
Log.Comment("Validate with spacing");
736736
ValidateFlowLayoutChildrenLayoutBounds(
@@ -1123,7 +1123,7 @@ public void ValidateLayoutWithInfiniteMeasureSizeInNonVirtualizingDirection()
11231123
{
11241124
new StackLayout { Spacing = 10, Orientation = scrollOrientation.ToLayoutOrientation() },
11251125
new UniformGridLayout { MinItemHeight = 40, MinItemWidth = 40, MinColumnSpacing = 10, MinRowSpacing = 10, Orientation = scrollOrientation.ToOrthogonalLayoutOrientation() },
1126-
new FlowLayout { MinColumnSpacing = 10, MinRowSpacing = 10, Orientation = scrollOrientation.ToOrthogonalLayoutOrientation() }
1126+
new FlowLayout { MinItemSpacing = 10, LineSpacing = 10, Orientation = scrollOrientation.ToOrthogonalLayoutOrientation() }
11271127
};
11281128

11291129
var verifyDesiredSize = new Action<Size, Size>((expected, actual) =>
@@ -1166,7 +1166,7 @@ public void ValidateIntersectionWithRealizationWindow()
11661166
{
11671167
new StackLayout { Spacing = 10, Orientation = scrollOrientation.ToLayoutOrientation() },
11681168
new UniformGridLayout { MinItemHeight = 40, MinItemWidth = 40, MinColumnSpacing = 10, MinRowSpacing = 10, Orientation = scrollOrientation.ToOrthogonalLayoutOrientation() },
1169-
new FlowLayout { MinColumnSpacing = 10, MinRowSpacing = 10, Orientation = scrollOrientation.ToOrthogonalLayoutOrientation() }
1169+
new FlowLayout { MinItemSpacing = 10, LineSpacing = 10, Orientation = scrollOrientation.ToOrthogonalLayoutOrientation() }
11701170
};
11711171
});
11721172
return layouts;
@@ -1719,12 +1719,11 @@ private void ValidateLayoutEstimations(ScrollOrientation scrollOrientation, Layo
17191719

17201720
case LayoutChoice.Flow:
17211721
{
1722-
var minRowSpacing = om.ScrollOrientation == ScrollOrientation.Vertical ? lineSpacing : 0;
1723-
var minColumnSpacing = om.ScrollOrientation == ScrollOrientation.Horizontal ? lineSpacing : 0;
17241722
layout = new FlowLayoutDerived()
17251723
{
1726-
MinRowSpacing = minRowSpacing,
1727-
MinColumnSpacing = minColumnSpacing,
1724+
// Only apply spacing between lines (major direction) for this test.
1725+
MinItemSpacing = 0,
1726+
LineSpacing = lineSpacing,
17281727
OnLineArrangedFunc = (int startIndex, int countInLine, double lineSize, VirtualizingLayoutContext context) =>
17291728
{
17301729
Verify.AreEqual(0, startIndex % 4);

src/controls/dev/Repeater/FlowLayout.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ winrt::Size FlowLayout::MeasureOverride(
5959
availableSize,
6060
context,
6161
true, /* isWrapping*/
62-
MinItemSpacing(),
63-
LineSpacing(),
62+
m_minItemSpacing,
63+
m_lineSpacing,
6464
std::numeric_limits<unsigned int>::max() /* maxItemsPerLine */,
6565
OrientationBasedMeasures::GetScrollOrientation(),
6666
true /* isVirtualizationEnabled */,
@@ -134,7 +134,7 @@ winrt::FlowLayoutAnchorInfo FlowLayout::GetAnchorForRealizationRect(
134134
const auto lastExtent = flowState->FlowAlgorithm().LastExtent();
135135

136136
double averageItemsPerLine = 0;
137-
const double averageLineSize = GetAverageLineInfo(availableSize, context, flowState, averageItemsPerLine) + LineSpacing();
137+
const double averageLineSize = GetAverageLineInfo(availableSize, context, flowState, averageItemsPerLine) + m_lineSpacing;
138138
MUX_ASSERT(averageItemsPerLine != 0);
139139

140140
const double extentMajorSize = MajorSize(lastExtent) == 0 ? (itemsCount / averageItemsPerLine) * averageLineSize : MajorSize(lastExtent);
@@ -170,7 +170,7 @@ winrt::FlowLayoutAnchorInfo FlowLayout::GetAnchorForTargetElement(
170170
const auto state = context.LayoutState();
171171
auto flowState = GetAsFlowState(state);
172172
double averageItemsPerLine = 0;
173-
const double averageLineSize = GetAverageLineInfo(availableSize, context, flowState, averageItemsPerLine) + LineSpacing();
173+
const double averageLineSize = GetAverageLineInfo(availableSize, context, flowState, averageItemsPerLine) + m_lineSpacing;
174174
const int lineIndex = (int)(targetIndex / averageItemsPerLine);
175175
offset = lineIndex * averageLineSize + MajorStart(flowState->FlowAlgorithm().LastExtent());
176176
}
@@ -200,7 +200,7 @@ winrt::Rect FlowLayout::GetExtent(
200200
const auto state = context.LayoutState();
201201
const auto flowState = GetAsFlowState(state);
202202
double averageItemsPerLine = 0;
203-
const double averageLineSize = GetAverageLineInfo(availableSize, context, flowState, averageItemsPerLine) + LineSpacing();
203+
const double averageLineSize = GetAverageLineInfo(availableSize, context, flowState, averageItemsPerLine) + m_lineSpacing;
204204

205205
MUX_ASSERT(averageItemsPerLine != 0);
206206
if (firstRealized)
@@ -224,18 +224,16 @@ winrt::Rect FlowLayout::GetExtent(
224224
}
225225
else
226226
{
227-
const auto lineSpacing = LineSpacing();
228-
const auto minItemSpacing = MinItemSpacing();
229227
// We dont have anything realized. make an educated guess.
230228
const int numLines = (int)std::ceil(itemsCount / averageItemsPerLine);
231229
extent =
232230
std::isfinite(availableSizeMinor) ?
233-
MinorMajorRect(0, 0, availableSizeMinor, std::max(0.0f, static_cast<float>(numLines * averageLineSize - lineSpacing))) :
231+
MinorMajorRect(0, 0, availableSizeMinor, std::max(0.0f, static_cast<float>(numLines * averageLineSize - m_lineSpacing))) :
234232
MinorMajorRect(
235233
0,
236234
0,
237-
std::max(0.0f, static_cast<float>((Minor(flowState->SpecialElementDesiredSize()) + minItemSpacing) * itemsCount - minItemSpacing)),
238-
std::max(0.0f, static_cast<float>(averageLineSize - lineSpacing)));
235+
std::max(0.0f, static_cast<float>((Minor(flowState->SpecialElementDesiredSize()) + m_minItemSpacing) * itemsCount - m_minItemSpacing)),
236+
std::max(0.0f, static_cast<float>(averageLineSize - m_lineSpacing)));
239237
ITEMSREPEATER_TRACE_VERBOSE_DBG(nullptr, TRACE_MSG_METH_IND_STR_STR, METH_NAME, this,
240238
winrt::get_self<VirtualizingLayoutContext>(context)->Indent(), LayoutId().data(),
241239
L"Estimating extent with no realized elements.");
@@ -421,13 +419,13 @@ void FlowLayout::OnPropertyChanged(const winrt::DependencyPropertyChangedEventAr
421419

422420
UpdateIndexBasedLayoutOrientation(orientation);
423421
}
424-
else if (property == s_MinColumnSpacingProperty)
422+
else if (property == s_MinItemSpacingProperty)
425423
{
426-
m_minColumnSpacing = unbox_value<double>(args.NewValue());
424+
m_minItemSpacing = unbox_value<double>(args.NewValue());
427425
}
428-
else if (property == s_MinRowSpacingProperty)
426+
else if (property == s_LineSpacingProperty)
429427
{
430-
m_minRowSpacing = unbox_value<double>(args.NewValue());
428+
m_lineSpacing = unbox_value<double>(args.NewValue());
431429
}
432430
else if (property == s_LineAlignmentProperty)
433431
{

src/controls/dev/Repeater/FlowLayout.h

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -166,22 +166,12 @@ class FlowLayout :
166166
return MajorEnd(realizationWindow) >= MajorStart(extent) && MajorStart(realizationWindow) <= MajorEnd(extent);
167167
}
168168

169-
double LineSpacing()
170-
{
171-
return GetScrollOrientation() == ScrollOrientation::Vertical ? m_minRowSpacing : m_minColumnSpacing;
172-
}
173-
174-
double MinItemSpacing()
175-
{
176-
return GetScrollOrientation() == ScrollOrientation::Vertical ? m_minColumnSpacing : m_minRowSpacing;
177-
}
178-
179169
void UpdateIndexBasedLayoutOrientation(
180170
const winrt::Orientation& orientation);
181171

182172
// Fields
183-
double m_minRowSpacing{};
184-
double m_minColumnSpacing{};
173+
double m_lineSpacing{};
174+
double m_minItemSpacing{};
185175
winrt::FlowLayoutLineAlignment m_lineAlignment{ winrt::FlowLayoutLineAlignment::Start };
186176

187177
// !!! WARNING !!!

src/controls/dev/Repeater/ItemsRepeater.idl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,15 +516,15 @@ unsealed runtimeclass FlowLayout : VirtualizingLayout
516516
[MUX_DEFAULT_VALUE("winrt::Orientation::Horizontal")]
517517
Microsoft.UI.Xaml.Controls.Orientation Orientation { get; set; };
518518
[MUX_DEFAULT_VALUE("0.0")]
519-
Double MinRowSpacing { get; set; };
519+
Double LineSpacing { get; set; };
520520
[MUX_DEFAULT_VALUE("0.0")]
521-
Double MinColumnSpacing { get; set; };
521+
Double MinItemSpacing { get; set; };
522522
[MUX_DEFAULT_VALUE("winrt::FlowLayoutLineAlignment::Start")]
523523
FlowLayoutLineAlignment LineAlignment { get; set; };
524524

525525
static Microsoft.UI.Xaml.DependencyProperty OrientationProperty { get; };
526-
static Microsoft.UI.Xaml.DependencyProperty MinRowSpacingProperty { get; };
527-
static Microsoft.UI.Xaml.DependencyProperty MinColumnSpacingProperty { get; };
526+
static Microsoft.UI.Xaml.DependencyProperty LineSpacingProperty { get; };
527+
static Microsoft.UI.Xaml.DependencyProperty MinItemSpacingProperty { get; };
528528
static Microsoft.UI.Xaml.DependencyProperty LineAlignmentProperty { get; };
529529

530530
overridable Windows.Foundation.Size GetMeasureSize(Int32 index, Windows.Foundation.Size availableSize);

src/controls/dev/Repeater/TestUI/RepeaterTestUIPage.xaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
<LayoutPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" HorizontalAlignment="Center" VerticalAlignment="Center">
88
<LayoutPanel.Layout>
9-
<FlowLayout Orientation="Vertical" MinColumnSpacing="5" MinRowSpacing="5"/>
9+
<FlowLayout Orientation="Vertical" MinItemSpacing="5" LineSpacing="5"/>
1010
</LayoutPanel.Layout>
1111

1212
<LayoutPanel.Resources>
13-
<FlowLayout x:Key="flow" MinRowSpacing="5" MinColumnSpacing="5"/>
13+
<FlowLayout x:Key="flow" LineSpacing="5" MinItemSpacing="5"/>
1414
<StackLayout x:Key="stack" Spacing="5"/>
1515
</LayoutPanel.Resources>
1616

@@ -43,9 +43,9 @@
4343
<StackPanel>
4444
<TextBlock Text="Built in layouts" Style="{StaticResource SubheaderTextBlockStyle}"/>
4545
<StackPanel>
46-
<TextBlock>ItemSpacing</TextBlock>
46+
<TextBlock>MinItemSpacing</TextBlock>
4747
<TextBox x:Name="itemSpacing" Text="10"/>
48-
<TextBlock>MinColumnSpacing</TextBlock>
48+
<TextBlock>LineSpacing</TextBlock>
4949
<TextBox x:Name="lineSpacing" Text="10"/>
5050
<TextBlock>LineAlignment</TextBlock>
5151
<TextBlock>(Start/Center/End/SpaceEvenly/SpaceAround/SpaceBetween)</TextBlock>

0 commit comments

Comments
 (0)