packages/MaterialDesignThemes.2.5.1/src/net45/Converters/ClockItemIsCheckedConverter.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Globalization;
using System.Windows.Data;

namespace MaterialDesignThemes.Wpf.Converters
{
    internal class ClockItemIsCheckedConverter : IValueConverter
    {
        private readonly Func<DateTime> _currentTimeGetter;
        private readonly ClockDisplayMode _displayMode;
        private readonly bool _is24Hours;

        public ClockItemIsCheckedConverter(Func<DateTime> currentTimeGetter, ClockDisplayMode displayMode, bool is24Hours)
        {
            _currentTimeGetter = currentTimeGetter ?? throw new ArgumentNullException(nameof(currentTimeGetter));
            _displayMode = displayMode;
            _is24Hours = is24Hours;
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var dateTime = (DateTime)value;
            var i = (int)parameter;

            int converted = 0;
            if (_displayMode == ClockDisplayMode.Hours)
                converted = MassageHour(dateTime.Hour, _is24Hours);
            else if (_displayMode == ClockDisplayMode.Minutes)
                converted = MassageMinuteSecond(dateTime.Minute);
            else
                converted = MassageMinuteSecond(dateTime.Second);
            return converted == i;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if ((bool)value != true) return Binding.DoNothing;

            var currentTime = _currentTimeGetter();

            return new DateTime(
                currentTime.Year, currentTime.Month, currentTime.Day,
                (_displayMode == ClockDisplayMode.Hours) ? ReverseMassageHour((int)parameter, currentTime, _is24Hours) : currentTime.Hour,
                (_displayMode == ClockDisplayMode.Minutes) ? ReverseMassageMinuteSecond((int)parameter) : currentTime.Minute,
                (_displayMode == ClockDisplayMode.Seconds) ? ReverseMassageMinuteSecond((int)parameter) : currentTime.Second);
        }

        private static int MassageHour(int val, bool is24Hours)
        {
            if (is24Hours)
            {
                return val == 0 ? 24 : val;
            }

            if (val == 0) return 12;
            if (val > 12) return val - 12;
            return val;
        }

        private static int MassageMinuteSecond(int val)
后面还有 22 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。