System.Windows.Markup.StaticExtension.ProvideValue C# (CSharp) Method

ProvideValue() public method

public ProvideValue ( IServiceProvider serviceProvider ) : object
serviceProvider IServiceProvider
return object
		public override object ProvideValue (IServiceProvider serviceProvider)
		{
			if (serviceProvider == null)
				throw new ArgumentNullException ();

			if (member == null)
				throw new ArgumentNullException ();

			IXamlTypeResolver resolver = serviceProvider.GetService (typeof (IXamlTypeResolver)) as IXamlTypeResolver;
			if (resolver == null)
				throw new ArgumentException ("Markup extension 'StaticExtension' requires 'IXamlTypeResolver' be implemented in the IServiceProvider for ProvideValue");

			int dot = member.LastIndexOf ('.');
			string typeName = member.Substring (0, dot);
			string memberName = member.Substring (dot + 1);

			Type type = resolver.Resolve (typeName);
			// we don't check type here for nullness, as WPF raises a NRE

			PropertyInfo pi = type.GetProperty (memberName, BindingFlags.Public | BindingFlags.Static);
			if (pi != null)
				return pi.GetValue (null, null);

			FieldInfo fi = type.GetField (memberName, BindingFlags.Public | BindingFlags.Static);
			if (fi != null)
				return fi.GetValue (null);

			throw new ArgumentException (string.Format ("'{0}' StaticExtension value cannot be resolved to an enumeration, static field, or static property", member));
		}

Usage Example

Example #1
0
		public void ProvideValueConst ()
		{
			var x = new StaticExtension ();
			x.MemberType = typeof (XamlLanguage);
			x.Member = "Xaml2006Namespace";
			Assert.AreEqual (XamlLanguage.Xaml2006Namespace, x.ProvideValue (null), "#1");
		}
All Usage Examples Of System.Windows.Markup.StaticExtension::ProvideValue