public void CanConvertFrom()
        {
            SizeConverter r = new SizeConverter();

            Assert.IsTrue(r.CanConvertFrom(typeof(string)));
            Assert.IsFalse(r.CanConvertFrom(typeof(Size)));
        }
예제 #2
0
        public void CanConvertFrom()
        {
            _converter.CanConvertFrom(null, typeof(string)).Should().BeTrue();

            _converter.CanConvertFrom(null, typeof(int)).Should().BeFalse();
            _converter.CanConvertFrom(null, typeof(void)).Should().BeFalse();
            _converter.CanConvertFrom(null, typeof(object)).Should().BeFalse();
            _converter.CanConvertFrom(null, typeof(Size)).Should().BeFalse();
            _converter.CanConvertFrom(null, typeof(SizeConverter)).Should().BeFalse();
        }
        /// <inheritdoc />
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var desiredSize = Size.Empty;

            // TargetVisual can be at index 1 or index 2, depending on the number of values passed
            var targetVisual = values.Length == 2
                                   ? values[1] as Visual
                                   : null;

            if (targetVisual == null)
            {
                targetVisual = values.Length == 3
                                   ? values[2] as Visual
                                   : null;
            }

            if (values.Length >= 2 &&
                values[1] is Size desiredSizeFromIndex1)
            {
                desiredSize = desiredSizeFromIndex1;
            }
            else if (values.Length >= 2 &&
                     (values[1] is Visual) == false)
            {
                var    possibleDesiredSizeValue = values[1];
                object convertedValue;

                if (sizeConverter.CanConvertFrom(possibleDesiredSizeValue.GetType()) &&
                    (convertedValue = sizeConverter.ConvertFrom(possibleDesiredSizeValue)) != null)
                {
                    desiredSize = (Size)convertedValue;
                }
                else
                {
                    desiredSize = Size.Empty;
                }
            }

            //if (desiredSize.IsEmpty
            //    && targetVisual != null
            //    && targetVisual is FrameworkElement targetFrameworkElement
            //    && DoubleHelper.IsFinite(targetFrameworkElement.Width)
            //    && DoubleHelper.IsFinite(targetFrameworkElement.Height))
            //{
            //    desiredSize = new Size(targetFrameworkElement.Width, targetFrameworkElement.Height);
            //}

            return(this.Convert(values[0], targetVisual, desiredSize, targetType));
        }
        /// <inheritdoc />
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var desiredSize  = Size.Empty;
            var valuesLength = values.Length;

            // TargetVisual can be at index 1 or index 2, depending on the number of values passed
            var targetVisual = valuesLength == 2
                ? values[1] as Visual
                : null;

            if (targetVisual is null)
            {
                targetVisual = valuesLength == 3
                    ? values[2] as Visual
                    : null;
            }

            if (valuesLength >= 2 &&
                values[1] is Size desiredSizeFromIndex1)
            {
                desiredSize = desiredSizeFromIndex1;
            }
            else if (valuesLength >= 2 &&
                     (values[1] is Visual) == false)
            {
                var    possibleDesiredSizeValue = values[1];
                object?convertedValue;

                if (possibleDesiredSizeValue is not null &&
                    sizeConverter.CanConvertFrom(possibleDesiredSizeValue.GetType()) &&
                    (convertedValue = sizeConverter.ConvertFrom(possibleDesiredSizeValue)) is not null)
                {
                    desiredSize = (Size)convertedValue;
                }
                else
                {
                    desiredSize = Size.Empty;
                }
            }