@@ -39,52 +39,40 @@ public ResourceExtension(string member)
3939 /// <param name="serviceProvider">An object that can provide services for the markup extension. The service provider is expected to provide a service that implements a type resolver (<see cref="T:System.Windows.Markup.IXamlTypeResolver"/>).</param><exception cref="T:System.InvalidOperationException">The <paramref name="member"/> value for the extension is null at the time of evaluation.</exception><exception cref="T:System.ArgumentException">Some part of the <paramref name="member"/> string did not parse properly-or-<paramref name="serviceProvider"/> did not provide a service for <see cref="T:System.Windows.Markup.IXamlTypeResolver"/>-or-<paramref name="member"/> value did not resolve to a static member.</exception><exception cref="T:System.ArgumentNullException"><paramref name="serviceProvider"/> is null.</exception>
4040 public override object ProvideValue ( IServiceProvider serviceProvider )
4141 {
42- if ( this . Member == null )
43- throw new InvalidOperationException ( "MarkupExtensionStaticMember" ) ;
44- if ( DesignMode . IsDesignMode )
42+ try
4543 {
46- var target = serviceProvider . GetService ( typeof ( IProvideValueTarget ) ) as IProvideValueTarget ;
47- if ( target != null && target . TargetObject is FrameworkElement )
44+ if ( this . Member == null )
45+ throw new InvalidOperationException ( "MarkupExtensionStaticMember" ) ;
46+ if ( DesignMode . IsDesignMode )
4847 {
49- var frameworkElement = ( FrameworkElement ) target . TargetObject ;
50- var value = ( XmlLanguage ) frameworkElement . GetValue ( FrameworkElement . LanguageProperty ) ;
51- if ( value != null )
48+ var target = serviceProvider . GetService ( typeof ( IProvideValueTarget ) ) as IProvideValueTarget ;
49+ if ( target != null && target . TargetObject is FrameworkElement )
5250 {
53- Translator . CurrentCulture = CultureInfo . GetCultureInfo ( value . IetfLanguageTag ) ;
51+ var frameworkElement = ( FrameworkElement ) target . TargetObject ;
52+ var value = ( XmlLanguage ) frameworkElement . GetValue ( FrameworkElement . LanguageProperty ) ;
53+ if ( value != null )
54+ {
55+ Translator . CurrentCulture = CultureInfo . GetCultureInfo ( value . IetfLanguageTag ) ;
56+ }
5457 }
55- }
56- if ( target != null && ! ( target . TargetObject is DependencyObject ) )
57- {
58- xamlTypeResolver = serviceProvider . GetService ( typeof ( IXamlTypeResolver ) ) as IXamlTypeResolver ;
58+ if ( target != null && ! ( target . TargetObject is DependencyObject ) )
59+ {
60+ xamlTypeResolver = serviceProvider . GetService ( typeof ( IXamlTypeResolver ) ) as IXamlTypeResolver ;
5961
60- return this ;
62+ return this ;
63+ }
6164 }
62- }
6365
64- Type type = this . MemberType ;
65- string name ;
66- string str ;
67- if ( type != ( Type ) null )
68- {
69- name = this . Member ;
70- str = type . FullName + "." + this . Member ;
71- }
72- else
73- {
74- str = this . Member ;
75- int length = this . Member . IndexOf ( '.' ) ;
76- if ( length < 0 )
66+ Type type = this . MemberType ;
67+ string name ;
68+ if ( type != ( Type ) null )
7769 {
78- if ( DesignMode . IsDesignMode )
79- {
80- throw new ArgumentException ( "Expecting format p:Resources.Key was:" + Member ) ;
81- }
82- return string . Format ( Properties . Resources . UnknownErrorFormat , Member ) ;
70+ name = this . Member ;
8371 }
8472 else
8573 {
86- string qualifiedTypeName = this . Member . Substring ( 0 , length ) ;
87- if ( qualifiedTypeName == string . Empty )
74+ int length = this . Member . IndexOf ( '.' ) ;
75+ if ( length < 0 )
8876 {
8977 if ( DesignMode . IsDesignMode )
9078 {
@@ -94,50 +82,70 @@ public override object ProvideValue(IServiceProvider serviceProvider)
9482 }
9583 else
9684 {
97- if ( serviceProvider == null )
98- throw new ArgumentNullException ( "serviceProvider" ) ;
99- if ( xamlTypeResolver == null )
100- {
101- xamlTypeResolver = serviceProvider . GetService ( typeof ( IXamlTypeResolver ) ) as IXamlTypeResolver ;
102- }
103- if ( xamlTypeResolver == null )
85+ string qualifiedTypeName = this . Member . Substring ( 0 , length ) ;
86+ if ( string . IsNullOrEmpty ( qualifiedTypeName ) )
10487 {
105- throw new ArgumentException ( "MarkupExtensionNoContext IXamlTypeResolver" ) ;
88+ if ( DesignMode . IsDesignMode )
89+ {
90+ throw new ArgumentException ( "Expecting format p:Resources.Key was:" + Member ) ;
91+ }
92+ return string . Format ( Properties . Resources . UnknownErrorFormat , Member ) ;
10693 }
10794 else
10895 {
109- type = xamlTypeResolver . Resolve ( qualifiedTypeName ) ;
110- name = this . Member . Substring ( length + 1 , this . Member . Length - length - 1 ) ;
111- if ( name == string . Empty )
96+ if ( serviceProvider == null )
97+ throw new ArgumentNullException ( "serviceProvider" ) ;
98+ if ( xamlTypeResolver == null )
99+ {
100+ xamlTypeResolver = serviceProvider . GetService ( typeof ( IXamlTypeResolver ) ) as IXamlTypeResolver ;
101+ }
102+ if ( xamlTypeResolver == null )
103+ {
104+ throw new ArgumentException ( "MarkupExtensionNoContext IXamlTypeResolver" ) ;
105+ }
106+ else
112107 {
113- if ( DesignMode . IsDesignMode )
108+ type = xamlTypeResolver . Resolve ( qualifiedTypeName ) ;
109+ name = this . Member . Substring ( length + 1 , this . Member . Length - length - 1 ) ;
110+ if ( string . IsNullOrEmpty ( name ) )
114111 {
115- throw new ArgumentException ( "Expecting format p:Resources.Key was:" + Member ) ;
112+ if ( DesignMode . IsDesignMode )
113+ {
114+ throw new ArgumentException ( "Expecting format p:Resources.Key was:" + Member ) ;
115+ }
116+ return string . Format ( Properties . Resources . UnknownErrorFormat , Member ) ;
116117 }
117- return string . Format ( Properties . Resources . UnknownErrorFormat , Member ) ;
118118 }
119119 }
120120 }
121121 }
122- }
123122
124- var resourceManager = Cache . GetOrAdd ( type , GetManager ) ;
125- if ( resourceManager == null )
123+ var resourceManager = Cache . GetOrAdd ( type , GetManager ) ;
124+ if ( resourceManager == null )
125+ {
126+ if ( DesignMode . IsDesignMode )
127+ {
128+ throw new ArgumentException ( "Expecting format p:Resources.Key was:" + Member ) ;
129+ }
130+ return string . Format ( Properties . Resources . NullManagerFormat , name ) ;
131+ }
132+
133+ var translator = new Translator ( resourceManager , name ) ;
134+ var binding = new Binding ( "Value" )
135+ {
136+ Source = translator
137+ } ;
138+ var provideValue = binding . ProvideValue ( serviceProvider ) ;
139+ return provideValue ;
140+ }
141+ catch ( Exception )
126142 {
127143 if ( DesignMode . IsDesignMode )
128144 {
129- throw new ArgumentException ( "Expecting format p:Resources.Key was:" + Member ) ;
145+ throw ;
130146 }
131- return string . Format ( Properties . Resources . NullManagerFormat , name ) ;
147+ return string . Format ( Properties . Resources . UnknownErrorFormat , Member ) ;
132148 }
133-
134- var translator = new Translator ( resourceManager , name ) ;
135- var binding = new Binding ( "Value" )
136- {
137- Source = translator
138- } ;
139- var provideValue = binding . ProvideValue ( serviceProvider ) ;
140- return provideValue ;
141149 }
142150
143151 private static ResourceManagerWrapper GetManager ( Type type )
0 commit comments