/// <summary>
        /// Determines if the given value represents a valid state of this property.
        /// </summary>
        /// <param name="value">The state that should be used.</param>
        /// <returns>True if the state is valid, otherwise false.</returns>
        protected override Boolean IsValid(CSSValue value)
        {
            var mode = value.ToDecorationLine();

            if (mode.HasValue)
            {
                _line.Clear();
                _line.Add(mode.Value);
            }
            else if (value.Is(Keywords.None))
            {
                _line.Clear();
            }
            else if (value is CSSValueList)
            {
                var values = (CSSValueList)value;
                var list   = new List <TextDecorationLine>();

                foreach (var item in values)
                {
                    mode = item.ToDecorationLine();

                    if (mode == null)
                    {
                        return(false);
                    }

                    list.Add(mode.Value);
                }

                _line = list;
            }
            else
            {
                return(false);
            }

            return(true);
        }