/// <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; } }
public AttributeInfo(string name, string value, AttributeOrderRule orderRule, MarkupExtension markupExtension) { this.Name = name; this.Value = value; this.OrderRule = orderRule; this.MarkupExtension = markupExtension; }
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; } }
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); }
public void TestBindingHello() { var sourceText = "{Binding Hello}"; var expected = new MarkupExtension("Binding", new PositionalArgument("Hello")); this.ParseAndAssertObjectGraph(sourceText, expected); }
public void TestHello() { var sourceText = "{Hello}"; var expected = new MarkupExtension("Hello"); this.ParseAndAssertObjectGraph(sourceText, expected); }
public AttributeInfo(string name, string value, AttributeOrderRule orderRule, MarkupExtension markupExtension) { Name = name; Value = value; OrderRule = orderRule; MarkupExtension = markupExtension; }
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)); }
/// <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)); }
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)); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
public override object CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider) { return(this._transparentRuntime.CallProvideValue(me, serviceProvider)); }
/// <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)); }
public override object ProvideValue(MarkupExtension me) { //ToDo: Implement returning default icon throw new NotImplementedException(); }
public override object ProvideValue(MarkupExtension me) { return Guid.NewGuid().ToString(); }
public override object ProvideValue(MarkupExtension me) { return(Archive[me.Arguments[0]].OpenReader()); }
public override object ProvideValue(MarkupExtension me) { return Archive[me.Arguments[0]].OpenReader(); }