diff --git a/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs b/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs index 30e9a974..2c06d782 100644 --- a/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs +++ b/src/Shared/HandyControl_Shared/Controls/Image/ImageBlock.cs @@ -25,6 +25,8 @@ namespace HandyControl.Controls private bool _isDisposed; + private int _columns = 1; + public ImageBlock() { _dispatcherTimer = new DispatcherTimer(DispatcherPriority.Render) @@ -68,16 +70,23 @@ namespace HandyControl.Controls private void UpdateDatas() { if (_source == null) return; - _indexMin = StartRow * Columns + StartColumn; - _indexMax = EndRow * Columns + EndColumn; + + _indexMin = StartRow * _columns + StartColumn; + _indexMax = EndRow * _columns + EndColumn; _currentIndex = _indexMin; - _blockWidth = _source.PixelWidth / Columns; + _blockWidth = _source.PixelWidth / _columns; _blockHeight = _source.PixelHeight / Rows; } private static void OnPositionsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var ctl = (ImageBlock)d; + + if (e.Property == ColumnsProperty) + { + ctl._columns = (int)e.NewValue; + } + ctl.UpdateDatas(); } @@ -212,8 +221,8 @@ namespace HandyControl.Controls _currentIndex = _indexMin; } - var x = _currentIndex % Columns * _blockWidth; - var y = _currentIndex / Columns * _blockHeight; + var x = _currentIndex % _columns * _blockWidth; + var y = _currentIndex / _columns * _blockHeight; var rect = new Int32Rect(x, y, _blockWidth, _blockHeight); _currentIndex++; diff --git a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs index 4d3eff8a..620a676f 100644 --- a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs +++ b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingBase.cs @@ -122,7 +122,7 @@ namespace HandyControl.Controls UpdateDots(); } - protected Ellipse CreateEllipse(int index) + protected virtual Ellipse CreateEllipse(int index) { var ellipse = new Ellipse(); ellipse.SetBinding(WidthProperty, new Binding(DotDiameterProperty.Name) {Source = this}); diff --git a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs index 40df8bfd..ab88a388 100644 --- a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs +++ b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingCircle.cs @@ -41,7 +41,13 @@ namespace HandyControl.Controls protected sealed override void UpdateDots() { - if (DotCount < 1) return; + var dotCount = DotCount; + var dotInterval = DotInterval; + var dotSpeed = DotSpeed; + var dotDelayTime = DotDelayTime; + var needHidden = NeedHidden; + + if (dotCount < 1) return; PrivateCanvas.Children.Clear(); //定义动画 @@ -51,16 +57,16 @@ namespace HandyControl.Controls }; //创建圆点 - for (var i = 0; i < DotCount; i++) + for (var i = 0; i < dotCount; i++) { - var border = CreateBorder(i); + var border = CreateBorder(i, dotInterval, needHidden); var framesMove = new DoubleAnimationUsingKeyFrames { - BeginTime = TimeSpan.FromMilliseconds(DotDelayTime * i) + BeginTime = TimeSpan.FromMilliseconds(dotDelayTime * i) }; - var subAngle = -DotInterval * i; + var subAngle = -dotInterval * i; //开始位置 var frame0 = new LinearDoubleKeyFrame @@ -77,14 +83,14 @@ namespace HandyControl.Controls EasingMode = EasingMode.EaseOut }, Value = 180 + subAngle, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (0.75 / 7))) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (0.75 / 7))) }; //第一次匀速开始到第一次匀速结束 var frame2 = new LinearDoubleKeyFrame { Value = 180 + DotOffSet + subAngle, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (2.75 / 7))) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (2.75 / 7))) }; //第一次匀速结束到匀加速结束 @@ -95,7 +101,7 @@ namespace HandyControl.Controls EasingMode = EasingMode.EaseIn }, Value = 360 + subAngle, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (3.5 / 7))) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (3.5 / 7))) }; //匀加速结束到匀减速结束 @@ -106,14 +112,14 @@ namespace HandyControl.Controls EasingMode = EasingMode.EaseOut }, Value = 540 + subAngle, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (4.25 / 7))) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (4.25 / 7))) }; //匀减速结束到第二次匀速结束 var frame5 = new LinearDoubleKeyFrame { Value = 540 + DotOffSet + subAngle, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (6.25 / 7))) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (6.25 / 7))) }; //第二次匀速结束到匀加速结束 @@ -124,7 +130,7 @@ namespace HandyControl.Controls EasingMode = EasingMode.EaseIn }, Value = 720 + subAngle, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed)) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed)) }; framesMove.KeyFrames.Add(frame0); @@ -145,13 +151,13 @@ namespace HandyControl.Controls var frame7 = new DiscreteObjectKeyFrame { Value = Visibility.Collapsed, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed)) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed)) }; var frame8 = new DiscreteObjectKeyFrame { Value = Visibility.Collapsed, - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed + 0.4)) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed + 0.4)) }; var frame9 = new DiscreteObjectKeyFrame @@ -161,7 +167,7 @@ namespace HandyControl.Controls }; var framesVisibility = new ObjectAnimationUsingKeyFrames { - BeginTime = TimeSpan.FromMilliseconds(DotDelayTime * i) + BeginTime = TimeSpan.FromMilliseconds(dotDelayTime * i) }; framesVisibility.KeyFrames.Add(frame9); framesVisibility.KeyFrames.Add(frame7); @@ -176,14 +182,14 @@ namespace HandyControl.Controls Storyboard.Begin(); } - private Border CreateBorder(int index) + private Border CreateBorder(int index, double dotInterval, bool needHidden) { var ellipse = CreateEllipse(index); ellipse.HorizontalAlignment = HorizontalAlignment.Center; ellipse.VerticalAlignment = VerticalAlignment.Bottom; var rt = new RotateTransform { - Angle = -DotInterval * index + Angle = -dotInterval * index }; var myTransGroup = new TransformGroup(); myTransGroup.Children.Add(rt); @@ -192,7 +198,7 @@ namespace HandyControl.Controls RenderTransformOrigin = new Point(0.5, 0.5), RenderTransform = myTransGroup, Child = ellipse, - Visibility = NeedHidden ? Visibility.Collapsed : Visibility.Visible + Visibility = needHidden ? Visibility.Collapsed : Visibility.Visible }; border.SetBinding(WidthProperty, new Binding("Width") { Source = this }); border.SetBinding(HeightProperty, new Binding("Height") { Source = this }); diff --git a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingLine.cs b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingLine.cs index ae81b51e..167d0f83 100644 --- a/src/Shared/HandyControl_Shared/Controls/Loading/LoadingLine.cs +++ b/src/Shared/HandyControl_Shared/Controls/Loading/LoadingLine.cs @@ -20,11 +20,17 @@ namespace HandyControl.Controls protected sealed override void UpdateDots() { - if (DotCount < 1) return; + var dotCount = DotCount; + var dotInterval = DotInterval; + var dotDiameter = DotDiameter; + var dotSpeed = DotSpeed; + var dotDelayTime = DotDelayTime; + + if (dotCount < 1) return; PrivateCanvas.Children.Clear(); //计算相关尺寸 - var centerWidth = DotDiameter * DotCount + DotInterval * (DotCount - 1) + MoveLength; + var centerWidth = dotDiameter * dotCount + dotInterval * (dotCount - 1) + MoveLength; var speedDownLength = (ActualWidth - MoveLength) / 2; var speedUniformLength = centerWidth / 2; @@ -35,13 +41,13 @@ namespace HandyControl.Controls }; //创建圆点 - for (var i = 0; i < DotCount; i++) + for (var i = 0; i < dotCount; i++) { - var ellipse = CreateEllipse(i); + var ellipse = CreateEllipse(i, dotInterval, dotDiameter); var frames = new ThicknessAnimationUsingKeyFrames { - BeginTime = TimeSpan.FromMilliseconds(DotDelayTime * i) + BeginTime = TimeSpan.FromMilliseconds(dotDelayTime * i) }; //开始位置 var frame0 = new LinearThicknessKeyFrame @@ -58,14 +64,14 @@ namespace HandyControl.Controls EasingMode = EasingMode.EaseOut }, Value = new Thickness(speedDownLength + ellipse.Margin.Left, 0, 0, 0), - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (1 - UniformScale)/2)) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (1 - UniformScale)/2)) }; //匀速开始到匀速结束 var frame2 = new LinearThicknessKeyFrame { Value = new Thickness(speedDownLength + speedUniformLength + ellipse.Margin.Left, 0, 0, 0), - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed * (1 + UniformScale) / 2)) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed * (1 + UniformScale) / 2)) }; //匀速结束到匀加速结束 @@ -76,7 +82,7 @@ namespace HandyControl.Controls EasingMode = EasingMode.EaseIn }, Value = new Thickness(ActualWidth + ellipse.Margin.Left + speedUniformLength, 0, 0, 0), - KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(DotSpeed)) + KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(dotSpeed)) }; frames.KeyFrames.Add(frame0); @@ -94,12 +100,12 @@ namespace HandyControl.Controls Storyboard.Begin(); } - private new Ellipse CreateEllipse(int index) + private Ellipse CreateEllipse(int index, double dotInterval, double dotDiameter) { var ellipse = base.CreateEllipse(index); ellipse.HorizontalAlignment = HorizontalAlignment.Left; ellipse.VerticalAlignment = VerticalAlignment.Top; - ellipse.Margin = new Thickness(-(DotInterval + DotDiameter) * index, 0, 0, 0); + ellipse.Margin = new Thickness(-(dotInterval + dotDiameter) * index, 0, 0, 0); return ellipse; } } diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs b/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs index 0fe9e68a..f28cc64b 100644 --- a/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs +++ b/src/Shared/HandyControl_Shared/Controls/Panel/CirclePanel.cs @@ -37,9 +37,11 @@ namespace HandyControl.Controls protected override Size MeasureOverride(Size availableSize) { - if (Children.Count == 0) return new Size(Diameter, Diameter); + var diameter = Diameter; - var newSize = new Size(Diameter, Diameter); + if (Children.Count == 0) return new Size(diameter, diameter); + + var newSize = new Size(diameter, diameter); foreach (UIElement element in Children) { @@ -51,6 +53,9 @@ namespace HandyControl.Controls protected override Size ArrangeOverride(Size finalSize) { + var keepVertical = KeepVertical; + var offsetAngle = OffsetAngle; + var i = 0; var perDeg = 360.0 / Children.Count; var radius = Diameter / 2; @@ -59,19 +64,23 @@ namespace HandyControl.Controls { var centerX = element.DesiredSize.Width / 2.0; var centerY = element.DesiredSize.Height / 2.0; - var angle = perDeg * i++ + OffsetAngle; + var angle = perDeg * i++ + offsetAngle; + var transform = new RotateTransform { CenterX = centerX, CenterY = centerY, - Angle = KeepVertical ? 0 : angle + Angle = keepVertical ? 0 : angle }; element.RenderTransform = transform; + var r = Math.PI * angle / 180.0; var x = radius * Math.Cos(r); var y = radius * Math.Sin(r); + var rectX = x + finalSize.Width / 2 - centerX; var rectY = y + finalSize.Height / 2 - centerY; + element.Arrange(new Rect(rectX, rectY, element.DesiredSize.Width, element.DesiredSize.Height)); } diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/FlexPanel.cs b/src/Shared/HandyControl_Shared/Controls/Panel/FlexPanel.cs index dd4b60b3..b3212296 100644 --- a/src/Shared/HandyControl_Shared/Controls/Panel/FlexPanel.cs +++ b/src/Shared/HandyControl_Shared/Controls/Panel/FlexPanel.cs @@ -144,9 +144,12 @@ namespace HandyControl.Controls protected override Size MeasureOverride(Size constraint) { - var curLineSize = new UVSize(FlexDirection); - var panelSize = new UVSize(FlexDirection); - _uvConstraint = new UVSize(FlexDirection, constraint); + var flexDirection = FlexDirection; + var flexWrap = FlexWrap; + + var curLineSize = new UVSize(flexDirection); + var panelSize = new UVSize(flexDirection); + _uvConstraint = new UVSize(flexDirection, constraint); var childConstraint = new Size(constraint.Width, constraint.Height); _lineCount = 1; var children = InternalChildren; @@ -174,9 +177,9 @@ namespace HandyControl.Controls } child.Measure(childConstraint); - var sz = new UVSize(FlexDirection, child.DesiredSize); + var sz = new UVSize(flexDirection, child.DesiredSize); - if (FlexWrap == FlexWrap.NoWrap) //continue to accumulate a line + if (flexWrap == FlexWrap.NoWrap) //continue to accumulate a line { curLineSize.U += sz.U; curLineSize.V = Math.Max(sz.V, curLineSize.V); @@ -194,7 +197,7 @@ namespace HandyControl.Controls { panelSize.U = Math.Max(sz.U, panelSize.U); panelSize.V += sz.V; - curLineSize = new UVSize(FlexDirection); + curLineSize = new UVSize(flexDirection); _lineCount++; } } @@ -216,7 +219,11 @@ namespace HandyControl.Controls protected override Size ArrangeOverride(Size arrangeSize) { - var uvFinalSize = new UVSize(FlexDirection, arrangeSize); + var flexDirection = FlexDirection; + var flexWrap = FlexWrap; + var alignContent = AlignContent; + + var uvFinalSize = new UVSize(flexDirection, arrangeSize); if (MathHelper.IsZero(uvFinalSize.U) || MathHelper.IsZero(uvFinalSize.V)) return arrangeSize; // init status @@ -224,7 +231,7 @@ namespace HandyControl.Controls var lineIndex = 0; var curLineSizeArr = new UVSize[_lineCount]; - curLineSizeArr[0] = new UVSize(FlexDirection); + curLineSizeArr[0] = new UVSize(flexDirection); var lastInLineArr = new int[_lineCount]; for (var i = 0; i < _lineCount; i++) @@ -238,9 +245,9 @@ namespace HandyControl.Controls var child = children[_orderList[i].Index]; if (child == null) continue; - var sz = new UVSize(FlexDirection, child.DesiredSize); + var sz = new UVSize(flexDirection, child.DesiredSize); - if (FlexWrap == FlexWrap.NoWrap) + if (flexWrap == FlexWrap.NoWrap) { curLineSizeArr[lineIndex].U += sz.U; curLineSizeArr[lineIndex].V = Math.Max(sz.V, curLineSizeArr[lineIndex].V); @@ -258,7 +265,7 @@ namespace HandyControl.Controls //switch to next line which only contain one element lastInLineArr[lineIndex] = i; lineIndex++; - curLineSizeArr[lineIndex] = new UVSize(FlexDirection); + curLineSizeArr[lineIndex] = new UVSize(flexDirection); } } else //continue to accumulate a line @@ -273,8 +280,8 @@ namespace HandyControl.Controls var scaleU = Math.Min(_uvConstraint.U / uvFinalSize.U, 1); var firstInLine = 0; var wrapReverseAdd = 0; - var wrapReverseFlag = FlexWrap == FlexWrap.WrapReverse ? -1 : 1; - var accumulatedFlag = FlexWrap == FlexWrap.WrapReverse ? 1 : 0; + var wrapReverseFlag = flexWrap == FlexWrap.WrapReverse ? -1 : 1; + var accumulatedFlag = flexWrap == FlexWrap.WrapReverse ? 1 : 0; var itemsU = .0; var accumulatedV = .0; var freeV = uvFinalSize.V; @@ -287,7 +294,7 @@ namespace HandyControl.Controls // calculate status var lineFreeVArr = new double[_lineCount]; - switch (AlignContent) + switch (alignContent) { case FlexContentAlignment.Stretch: if (_lineCount > 1) @@ -298,15 +305,15 @@ namespace HandyControl.Controls lineFreeVArr[i] = freeItemV; } - accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - lineFreeVArr[0] : 0; + accumulatedV = flexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - lineFreeVArr[0] : 0; } break; case FlexContentAlignment.FlexStart: - wrapReverseAdd = FlexWrap == FlexWrap.WrapReverse ? 0 : 1; + wrapReverseAdd = flexWrap == FlexWrap.WrapReverse ? 0 : 1; if (_lineCount > 1) { - accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V : 0; + accumulatedV = flexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V : 0; } else { @@ -315,10 +322,10 @@ namespace HandyControl.Controls break; case FlexContentAlignment.FlexEnd: - wrapReverseAdd = FlexWrap == FlexWrap.WrapReverse ? 1 : 0; + wrapReverseAdd = flexWrap == FlexWrap.WrapReverse ? 1 : 0; if (_lineCount > 1) { - accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeV : freeV; + accumulatedV = flexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeV : freeV; } else { @@ -329,7 +336,7 @@ namespace HandyControl.Controls case FlexContentAlignment.Center: if (_lineCount > 1) { - accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeV * 0.5 : freeV * 0.5; + accumulatedV = flexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeV * 0.5 : freeV * 0.5; } break; @@ -342,7 +349,7 @@ namespace HandyControl.Controls lineFreeVArr[i] = freeItemV; } - accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V : 0; + accumulatedV = flexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V : 0; } break; @@ -355,7 +362,7 @@ namespace HandyControl.Controls lineFreeVArr[i] = freeItemV * 2; } - accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeItemV : freeItemV; + accumulatedV = flexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeItemV : freeItemV; } break; @@ -370,9 +377,9 @@ namespace HandyControl.Controls var child = children[_orderList[i].Index]; if (child == null) continue; - var sz = new UVSize(FlexDirection, child.DesiredSize); + var sz = new UVSize(flexDirection, child.DesiredSize); - if (FlexWrap != FlexWrap.NoWrap) + if (flexWrap != FlexWrap.NoWrap) { if (i >= lastInLineArr[lineIndex]) //need to switch to another line { @@ -392,8 +399,7 @@ namespace HandyControl.Controls lineIndex++; itemsU = 0; - if (i >= lastInLineArr[lineIndex] - ) //the element is wider then the constraint - give it a separate line + if (i >= lastInLineArr[lineIndex]) //the element is wider then the constraint - give it a separate line { //switch to next line which only contain one element ArrangeLine(new FlexLineInfo @@ -441,8 +447,13 @@ namespace HandyControl.Controls private void ArrangeLine(FlexLineInfo lineInfo) { - var isHorizontal = FlexDirection == FlexDirection.Row || FlexDirection == FlexDirection.RowReverse; - var isReverse = FlexDirection == FlexDirection.RowReverse || FlexDirection == FlexDirection.ColumnReverse; + var flexDirection = FlexDirection; + var flexWrap = FlexWrap; + var justifyContent = JustifyContent; + var alignItems = AlignItems; + + var isHorizontal = flexDirection == FlexDirection.Row || flexDirection == FlexDirection.RowReverse; + var isReverse = flexDirection == FlexDirection.RowReverse || flexDirection == FlexDirection.ColumnReverse; var itemCount = lineInfo.ItemEndIndex - lineInfo.ItemStartIndex; var children = InternalChildren; var lineFreeU = lineInfo.LineU - lineInfo.ItemsU; @@ -452,7 +463,7 @@ namespace HandyControl.Controls var u = .0; if (isReverse) { - u = JustifyContent switch + u = justifyContent switch { FlexContentJustify.FlexStart => lineInfo.LineU, FlexContentJustify.SpaceBetween => lineInfo.LineU, @@ -464,7 +475,7 @@ namespace HandyControl.Controls } else { - u = JustifyContent switch + u = justifyContent switch { FlexContentJustify.FlexEnd => lineFreeU, FlexContentJustify.Center => lineFreeU * 0.5, @@ -550,7 +561,7 @@ namespace HandyControl.Controls var offsetUArr = new double[itemCount]; if (lineFreeU > 0) { - if (JustifyContent == FlexContentJustify.SpaceBetween) + if (justifyContent == FlexContentJustify.SpaceBetween) { var freeItemU = lineFreeU / (itemCount - 1); for (var i = 1; i < itemCount; i++) @@ -558,7 +569,7 @@ namespace HandyControl.Controls offsetUArr[i] = freeItemU; } } - else if (JustifyContent == FlexContentJustify.SpaceAround) + else if (justifyContent == FlexContentJustify.SpaceAround) { var freeItemU = lineFreeU / itemCount * 0.5; offsetUArr[0] = freeItemU; @@ -575,7 +586,7 @@ namespace HandyControl.Controls var child = children[_orderList[i].Index]; if (child == null) continue; - var childSize = new UVSize(FlexDirection, isHorizontal + var childSize = new UVSize(flexDirection, isHorizontal ? new Size(child.DesiredSize.Width * lineInfo.ScaleU, child.DesiredSize.Height) : new Size(child.DesiredSize.Width, child.DesiredSize.Height * lineInfo.ScaleU)); @@ -593,12 +604,12 @@ namespace HandyControl.Controls var v = lineInfo.OffsetV; var alignSelf = GetAlignSelf(child); - var alignment = alignSelf == FlexItemAlignment.Auto ? AlignItems : (FlexItemsAlignment)alignSelf; + var alignment = alignSelf == FlexItemAlignment.Auto ? alignItems : (FlexItemsAlignment)alignSelf; switch (alignment) { case FlexItemsAlignment.Stretch: - if (_lineCount == 1 && FlexWrap == FlexWrap.NoWrap) + if (_lineCount == 1 && flexWrap == FlexWrap.NoWrap) { childSize.V = lineInfo.LineV + lineInfo.LineFreeV; } diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs b/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs index b633c1fa..8196b514 100644 --- a/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs +++ b/src/Shared/HandyControl_Shared/Controls/Panel/Grid/Col.cs @@ -32,7 +32,7 @@ namespace HandyControl.Controls private static bool OnSpanValidate(object value) { var v = (int)value; - return v >= 1 || v <= 24; + return v >= 1 && v <= 24; } public int Span diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/WaterfallPanel.cs b/src/Shared/HandyControl_Shared/Controls/Panel/WaterfallPanel.cs index 2ddb6ffa..0c4a88b8 100644 --- a/src/Shared/HandyControl_Shared/Controls/Panel/WaterfallPanel.cs +++ b/src/Shared/HandyControl_Shared/Controls/Panel/WaterfallPanel.cs @@ -8,7 +8,8 @@ namespace HandyControl.Controls public class WaterfallPanel : Panel { public static readonly DependencyProperty GroupsProperty = DependencyProperty.Register( - "Groups", typeof(int), typeof(WaterfallPanel), new FrameworkPropertyMetadata(ValueBoxes.Int2Box, FrameworkPropertyMetadataOptions.AffectsMeasure), IsGroupsValid); + "Groups", typeof(int), typeof(WaterfallPanel), new FrameworkPropertyMetadata( + ValueBoxes.Int2Box, FrameworkPropertyMetadataOptions.AffectsMeasure), IsGroupsValid); public int Groups { @@ -16,11 +17,7 @@ namespace HandyControl.Controls set => SetValue(GroupsProperty, value); } - private static bool IsGroupsValid(object value) - { - var v = (int)value; - return v >= 1; - } + private static bool IsGroupsValid(object value) => (int)value >= 1; public static readonly DependencyProperty OrientationProperty = DependencyProperty.Register( "Orientation", typeof(Orientation), typeof(WaterfallPanel), new FrameworkPropertyMetadata( @@ -34,14 +31,16 @@ namespace HandyControl.Controls protected override Size MeasureOverride(Size constraint) { - if (Groups < 1) return constraint; + var groups = Groups; + + if (groups < 1) return constraint; var children = InternalChildren; Size panelSize; if (Orientation == Orientation.Horizontal) { - var heightArr = new double[Groups].ToList(); - var itemWidth = constraint.Width / Groups; + var heightArr = new double[groups].ToList(); + var itemWidth = constraint.Width / groups; if (double.IsNaN(itemWidth) || double.IsInfinity(itemWidth)) return constraint; for (int i = 0, count = children.Count; i < count; i++) @@ -60,8 +59,8 @@ namespace HandyControl.Controls } else { - var widthArr = new double[Groups].ToList(); - var itemHeight = constraint.Height / Groups; + var widthArr = new double[groups].ToList(); + var itemHeight = constraint.Height / groups; if (double.IsNaN(itemHeight) || double.IsInfinity(itemHeight)) return constraint; for (int i = 0, count = children.Count; i < count; i++)