Пример #1
0
        /// <summary>Handles cases where a markup extension provides a value for a property of <see cref="T:System.Windows.Setter" /> object.</summary>
        /// <param name="targetObject">The object where the markup extension sets the value.</param>
        /// <param name="eventArgs">Data that is relevant for markup extension processing.</param>
        // Token: 0x0600089C RID: 2204 RVA: 0x0001BFD0 File Offset: 0x0001A1D0
        public static void ReceiveMarkupExtension(object targetObject, XamlSetMarkupExtensionEventArgs eventArgs)
        {
            if (targetObject == null)
            {
                throw new ArgumentNullException("targetObject");
            }
            if (eventArgs == null)
            {
                throw new ArgumentNullException("eventArgs");
            }
            Setter setter = targetObject as Setter;

            if (setter == null || eventArgs.Member.Name != "Value")
            {
                return;
            }
            MarkupExtension markupExtension = eventArgs.MarkupExtension;

            if (markupExtension is StaticResourceExtension)
            {
                StaticResourceExtension staticResourceExtension = markupExtension as StaticResourceExtension;
                setter.Value      = staticResourceExtension.ProvideValueInternal(eventArgs.ServiceProvider, true);
                eventArgs.Handled = true;
                return;
            }
            if (markupExtension is DynamicResourceExtension || markupExtension is BindingBase)
            {
                setter.Value      = markupExtension;
                eventArgs.Handled = true;
            }
        }
Пример #2
0
 public AttributeInfo(string name, string value, AttributeOrderRule orderRule, MarkupExtension markupExtension)
 {
     this.Name            = name;
     this.Value           = value;
     this.OrderRule       = orderRule;
     this.MarkupExtension = markupExtension;
 }
Пример #3
0
        public static void ReceiveMarkupExtension(object targetObject, XamlSetMarkupExtensionEventArgs eventArgs)
        {
            if (targetObject == null)
            {
                throw new ArgumentNullException("targetObject");
            }
            if (eventArgs == null)
            {
                throw new ArgumentNullException("eventArgs");
            }

            Setter setter = targetObject as Setter;

            if (setter == null || eventArgs.Member.Name != "Value")
            {
                return;
            }

            MarkupExtension me = eventArgs.MarkupExtension;

            if (me is StaticResourceExtension)
            {
                var sr = me as StaticResourceExtension;
                setter.Value      = sr.ProvideValueInternal(eventArgs.ServiceProvider, true /*allowDeferedReference*/);
                eventArgs.Handled = true;
            }
            else if (me is DynamicResourceExtension || me is BindingBase)
            {
                setter.Value      = me;
                eventArgs.Handled = true;
            }
        }
Пример #4
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (_text == null)
            {
                return(null);
            }

            string s = null;

            MarkupExtension m = _text as MarkupExtension;

            if (m != null)
            {
                s = m.ProvideValue(serviceProvider) as string;
            }

            if (s == null)
            {
                s = _text as string;
            }

            for (int i = 0; i < _remove.Length; i++)
            {
                if (s != null)
                {
                    s = s.Replace(_remove[i].ToString(), string.Empty);
                }
            }

            return(s);
        }
Пример #5
0
        public void TestBindingHello()
        {
            var sourceText = "{Binding Hello}";
            var expected   = new MarkupExtension("Binding", new PositionalArgument("Hello"));

            this.ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #6
0
        public void TestHello()
        {
            var sourceText = "{Hello}";
            var expected   = new MarkupExtension("Hello");

            this.ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #7
0
 public AttributeInfo(string name, string value, AttributeOrderRule orderRule, MarkupExtension markupExtension)
 {
     Name            = name;
     Value           = value;
     OrderRule       = orderRule;
     MarkupExtension = markupExtension;
 }
Пример #8
0
        public void TestHelloWorld42()
        {
            var sourceText = "{Hello world=42}";
            var expected   = new MarkupExtension("Hello", new NamedArgument("world", "42"));

            this.ParseAndAssertObjectGraph(sourceText, expected);
        }
        /// <summary>
        /// Format markup extension and return elements as formatted lines with "local" indention.
        /// Indention from previous element/attribute/tags must be applied separately
        /// </summary>
        /// <param name="markupExtension"></param>
        /// /// <param name="isNested"></param>
        /// <returns></returns>
        public IEnumerable <string> Format(MarkupExtension markupExtension, bool isNested = false)
        {
            var formatter = (isNested || this.singleLineTypes.Contains(markupExtension.TypeName))
                ? this.singleLineFormatter
                : this.multiLineFormatter;

            return(formatter.FormatArguments(markupExtension, isNested: isNested));
        }
Пример #10
0
        /// <summary>
        /// Format markup extension and return elements as formatted lines with "local" indention.
        /// Indention from previous element/attribute/tags must be applied separately
        /// </summary>
        /// <param name="markupExtension"></param>
        /// <returns></returns>
        public IEnumerable <string> Format(MarkupExtension markupExtension)
        {
            var formatter = (this.singleLineTypes.Contains(markupExtension.TypeName))
                ? this.singleLineFormatter
                : this.multiLineFormatter;

            return(formatter.Format(markupExtension));
        }
Пример #11
0
        public AttributeInfo Create(XmlReader xmlReader)
        {
            string             attributeName   = xmlReader.Name;
            string             attributeValue  = xmlReader.Value;
            AttributeOrderRule orderRule       = this.orderRules.GetRuleFor(attributeName);
            MarkupExtension    markupExtension = this.ParseMarkupExtension(attributeValue);

            return(new AttributeInfo(attributeName, attributeValue, orderRule, markupExtension));
        }
Пример #12
0
 public AttributeInfo(string name, string value, bool attributeHasIgnoredNamespace, string attributeNameWithoutNamespace, AttributeOrderRule orderRule, MarkupExtension markupExtension)
 {
     this.Name  = name;
     this.Value = value;
     this.AttributeHasIgnoredNamespace  = attributeHasIgnoredNamespace;
     this.AttributeNameWithoutNamespace = attributeNameWithoutNamespace;
     this.OrderRule       = orderRule;
     this.MarkupExtension = markupExtension;
 }
Пример #13
0
        public void TestSignificantSpacing()
        {
            var sourceText = @"  { Binding  StringFormat = {} {0}\  , Mode = OneWay } ";
            var expected   = new MarkupExtension(
                "Binding",
                new NamedArgument("StringFormat", @"{} {0}\ "),
                new NamedArgument("Mode", "OneWay"));

            this.ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #14
0
        public void TestEscapedBraces2()
        {
            var sourceText = @"{Binding Value, StringFormat={}{0:N2}}";
            var expected   = new MarkupExtension(
                "Binding",
                new PositionalArgument("Value"),
                new NamedArgument("StringFormat", "{}{0:N2}"));

            this.ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #15
0
        public void TestHelloworldFoo1Bar42Spaced()
        {
            var sourceText = "  {  Hello   world ,  foo  =  1  ,  bar = 42  }  ";
            var expected   = new MarkupExtension(
                "Hello",
                new PositionalArgument("world"),
                new NamedArgument("foo", "1"),
                new NamedArgument("bar", "42"));

            this.ParseAndAssertObjectGraph(sourceText, expected);
        }
        public void TestNestedBinding2()
        {
            var sourceText = @"{DynamicResource {x:Static SystemColors.ControlTextBrushKey},
                                       ResourceKey={x:Static SystemColors.ControlTextBrushKey}}";
            var expected   = new MarkupExtension("DynamicResource",
                                                 new PositionalArgument(new MarkupExtension("x:Static", new PositionalArgument("SystemColors.ControlTextBrushKey"))),
                                                 new NamedArgument("ResourceKey", new MarkupExtension("x:Static", new PositionalArgument("SystemColors.ControlTextBrushKey")))
                                                 );

            ParseAndAssertObjectGraph(sourceText, expected);
        }
        public void TestBindingHelloFooBar()
        {
            var sourceText = "{Binding Hello, foo,bar}";
            var expected   = new MarkupExtension("Binding",
                                                 new PositionalArgument("Hello"),
                                                 new PositionalArgument("foo"),
                                                 new PositionalArgument("bar")
                                                 );

            ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #18
0
        public AttributeInfo Create(XmlReader xmlReader)
        {
            string attributeName  = xmlReader.Name;
            string attributeValue = xmlReader.Value;

            var attributeNameWithoutNamespace = String.Empty;
            var attributeHasIgnoredNamespace  = this.ignoreDesignTimeReferencePrefix && this.CheckIfAttributeHasIgnoredNamespace(attributeName, out attributeNameWithoutNamespace);

            AttributeOrderRule orderRule       = this.orderRules.GetRuleFor(attributeHasIgnoredNamespace ? attributeNameWithoutNamespace : attributeName);
            MarkupExtension    markupExtension = this.ParseMarkupExtension(attributeValue);

            return(new AttributeInfo(attributeName, attributeValue, attributeHasIgnoredNamespace, attributeNameWithoutNamespace, orderRule, markupExtension));
        }
        public void TestNestedBinding()
        {
            var sourceText = "{Binding ActualHeight, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type gpc:MainWindow}}}";
            var expected   = new MarkupExtension("Binding",
                                                 new PositionalArgument("ActualHeight"),
                                                 new NamedArgument("Mode", "OneWay"),
                                                 new NamedArgument("RelativeSource", new MarkupExtension("RelativeSource",
                                                                                                         new PositionalArgument("FindAncestor"),
                                                                                                         new NamedArgument("AncestorType",
                                                                                                                           new MarkupExtension("x:Type", new PositionalArgument("gpc:MainWindow")))))
                                                 );

            ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #20
0
        private void ParseAndAssertObjectGraph(string sourceText, MarkupExtension expected)
        {
            IMarkupExtensionParser markupExtensionParser = new MarkupExtensionParser();
            MarkupExtension        actual;
            var result = markupExtensionParser.TryParse(sourceText, out actual);

            Assert.That(result, Is.True);
            Assert.That(actual, Is.Not.Null);

            var compareLogic  = new CompareLogic();
            var compareResult = compareLogic.Compare(expected, actual);

            Assert.That(compareResult.AreEqual, Is.True, compareResult.DifferencesString);
        }
Пример #21
0
        private static object GetEvaluatedValue(object value)
        {
            MarkupExtension markupExtension = value as MarkupExtension;

            if (markupExtension != null)
            {
                return(markupExtension.ProvideValue((IServiceProvider)null));
            }
            ObjectDataProvider objectDataProvider = value as ObjectDataProvider;

            if (objectDataProvider != null)
            {
                return(objectDataProvider.ObjectInstance ?? (object)null);
            }
            return(value);
        }
        /// <summary>
        /// 验证 <see cref="MarkupExtension"/> 中此时提供的服务是否正在向 <see cref="FrameworkElement"/> 的依赖属性赋值。
        /// </summary>
        /// <param name="extension">需要进行通用验证的 <see cref="MarkupExtension"/>。</param>
        /// <param name="serviceProvider">在 <see cref="MarkupExtension.ProvideValue"/> 方法中传入的参数。</param>
        /// <param name="element">如果正在向 <see cref="FrameworkElement"/> 提供值,则返回此 <see cref="FrameworkElement"/> 实例。</param>
        /// <returns>如果验证为此时可以赋值,则返回 true;如果因为设计时支持或者服务对象不存在,则返回 false。</returns>
        internal static bool ValidateMarkupExtension(this MarkupExtension extension,
                                                     IServiceProvider serviceProvider, out FrameworkElement element)
        {
            if (extension == null)
            {
                throw new ArgumentNullException(nameof(extension));
            }

            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            var extensionName = extension.GetType().Name;

            // 设计时直接创建新实例。
            if (DesignerProperties.IsInDesignModeProperty.DefaultMetadata.DefaultValue is true)
            {
                element = null;
                return(false);
            }

            // 如果没有服务,则直接返回。
            if (!(serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget service))
            {
                element = null;
                return(false);
            }

            // MarkupExtension 在样式模板中,返回 this 以延迟提供值。
            if (service.TargetObject.ToString().EndsWith("SharedDp", StringComparison.Ordinal))
            {
                throw new NotSupportedException($"样式和模板不支持 {extensionName},请在 XAML 次根级元素中使用。");
            }
            if (service.TargetObject is SetterBase)
            {
                throw new NotSupportedException($"属性 Setter.Value 不支持 {extensionName},请在 XAML 次根级元素中使用。");
            }
            if (!(service.TargetObject is FrameworkElement frameworkElement))
            {
                throw new NotSupportedException("只有 FrameworkElement 才能支持使用 ViewModel 设置 DataContext。");
            }

            element = frameworkElement;
            return(true);
        }
Пример #23
0
        public override object CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
        {
            object obj3;

            try
            {
                obj3 = me.ProvideValue(serviceProvider);
            }
            catch (Exception exception)
            {
                if (CriticalExceptions.IsCriticalException(exception))
                {
                    throw;
                }
                throw this.CreateException(System.Xaml.SR.Get("ProvideValue", new object[] { me.GetType() }), exception);
            }
            return(obj3);
        }
        public void TestNestedBindingWithBraceFormat()
        {
            var sourceText = @"{Binding Title,
                              RelativeSource={RelativeSource FindAncestor,
                                                             AncestorType={x:Type UserControl}},
                              StringFormat={}{0}Now{{0}} - {0}}";
            var expected   = new MarkupExtension("Binding",
                                                 new PositionalArgument("Title"),
                                                 new NamedArgument("RelativeSource",
                                                                   new MarkupExtension("RelativeSource",
                                                                                       new PositionalArgument("FindAncestor"),
                                                                                       new NamedArgument("AncestorType",
                                                                                                         new MarkupExtension("x:Type", new PositionalArgument("UserControl"))))),
                                                 new NamedArgument("StringFormat", "{}{0}Now{{0}} - {0}")
                                                 );

            ParseAndAssertObjectGraph(sourceText, expected);
        }
Пример #25
0
        public static object Evaluate(MarkupExtension markupExtension)
        {
            object result = null;

            RunOnStaThread(() =>
            {
                var target = new TargetElement();

                var provideValueTarget = Substitute.For <IProvideValueTarget>();
                var serviceProvider    = Substitute.For <IServiceProvider>();

                provideValueTarget.TargetObject.Returns(target);
                provideValueTarget.TargetProperty.Returns(TargetElement.ValueProperty);

                serviceProvider.GetService(typeof(IProvideValueTarget)).Returns(provideValueTarget);

                target.Value = markupExtension.ProvideValue(serviceProvider);

                result = target.Value;
            });

            return(result);
        }
Пример #26
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (this._text == null)
            {
                return(null);
            }
            string          str             = this._remove ?? "_";
            string          str1            = null;
            MarkupExtension markupExtension = this._text as MarkupExtension;

            if (markupExtension != null)
            {
                str1 = markupExtension.ProvideValue(serviceProvider) as string;
            }
            if (str1 == null)
            {
                str1 = this._text as string;
            }
            if (str1 == null)
            {
                return(null);
            }
            return(str1.Replace(str, string.Empty));
        }
Пример #27
0
        private DependencyProperty SetUnusedStorageProperty(DependencyObject obj, object value)
        {
            var property = StorageProperties.FirstOrDefault(p => obj.ReadLocalValue(p) == DependencyProperty.UnsetValue);

            if (property == null)
            {
                property = DependencyProperty.RegisterAttached("Storage" + StorageProperties.Count, typeof(object), typeof(MethodBindingExtension), new PropertyMetadata());
                StorageProperties.Add(property);
            }

            MarkupExtension markupExtension = value as MarkupExtension;

            if (markupExtension != null)
            {
                object resolvedValue = markupExtension.ProvideValue(new ServiceProvider(obj, property));
                obj.SetValue(property, resolvedValue);
            }
            else
            {
                obj.SetValue(property, value);
            }

            return(property);
        }
Пример #28
0
 public override object CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
 {
     return(this._transparentRuntime.CallProvideValue(me, serviceProvider));
 }
Пример #29
0
        /// <summary>
        /// Sets the value of a dependency property on <paramref name="targetObject"/> using a markup extension.
        /// </summary>
        /// <remarks>This method does not support markup extensions like x:Static that depend on
        /// having a XAML file as context.</remarks>
        public static void SetValueToExtension(this DependencyObject targetObject, DependencyProperty property, MarkupExtension markupExtension)
        {
            // This method was copied from ICSharpCode.Core.Presentation (with permission to switch license to X11)

            if (targetObject == null)
            {
                throw new ArgumentNullException(nameof(targetObject));
            }
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }
            if (markupExtension == null)
            {
                throw new ArgumentNullException(nameof(markupExtension));
            }

            var serviceProvider = new SetValueToExtensionServiceProvider(targetObject, property);

            targetObject.SetValue(property, markupExtension.ProvideValue(serviceProvider));
        }
Пример #30
0
 public override object ProvideValue(MarkupExtension me)
 {
     //ToDo: Implement returning default icon
     throw new NotImplementedException();
 }
Пример #31
0
 public override object ProvideValue(MarkupExtension me)
 {
     return Guid.NewGuid().ToString();
 }
Пример #32
0
 public override object ProvideValue(MarkupExtension me)
 {
     return(Archive[me.Arguments[0]].OpenReader());
 }
Пример #33
0
 public override object ProvideValue(MarkupExtension me)
 {
     return Archive[me.Arguments[0]].OpenReader();
 }