bonjour
j'aimerais faire un markup qui me permet de mettre en majuscule une dynamicresource
dans un premier temps j'avais tenté
mais etonnament ca passe meme pas dans ProvideValue (et encore ca plante dans le xaml quand on veut mettre un converter)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 [MarkupExtensionReturnType(typeof(object))] public class DynamicResourceConvertable : DynamicResourceExtension { public DynamicResourceConvertable() { } public DynamicResourceConvertable(object resourceKey) : base(resourceKey) { } public IValueConverter Converter { get; set; } = null; public object ConverterParameter { get; set; } = null; public override object ProvideValue(IServiceProvider provider) { object value = base.ProvideValue(provider); if (value != this && Converter != null) { Type targetType = null; var target = (IProvideValueTarget)provider.GetService(typeof(IProvideValueTarget)); if (target != null) { DependencyProperty targetDp = target.TargetProperty as DependencyProperty; if (targetDp != null) { targetType = targetDp.PropertyType; } } if (targetType != null) return Converter.Convert(value, targetType, ConverterParameter, CultureInfo.CurrentCulture); } return value; } }
donc abandon
bref je suis passé a quelque chose de plus pragmatique
avecet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <TextBlock DataContext="{DynamicResource TX_CHRONO}" Text="{wpf:Upper .}" Foreground="White" FontSize="{DynamicResource ContentFontSize}" VerticalAlignment="Center" />mais j'arrive pas a reccuperer le data context dans le ProvideValue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 [MarkupExtensionReturnType(typeof(string))] public class Upper : MarkupExtension { public object Path { get; set; } public Upper() { } public Upper(object path) { this.Path = path; } public override object ProvideValue(IServiceProvider serviceProvider) { //var dynamicResourceExtension = new DynamicResourceExtension(ResourceKey); //var resource = dynamicResourceExtension.ProvideValue(serviceProvider); IProvideValueTarget target = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget; if (target != null) { var _targetObject = target.TargetObject; object o = GetDataContext(_targetObject); var _targetProperty = target.TargetProperty; if (_targetObject != null) { if (_targetProperty is DependencyProperty) { DependencyObject obj = _targetObject as DependencyObject; DependencyProperty prop = _targetProperty as DependencyProperty; int xx = 0; // Action updateAction = () => obj.SetValue(prop, value); // Check whether the target object can be accessed from the // current thread, and use Dispatcher.Invoke if it can't //if (obj.CheckAccess()) // updateAction(); //else // obj.Dispatcher.Invoke(updateAction); } else // _targetProperty is PropertyInfo { PropertyInfo prop = _targetProperty as PropertyInfo; //prop.SetValue(_targetObject, value, null); } } int vv = 0; } return "alpha"; } static object GetDataContext(object target) { var depObj = target as DependencyObject; if (depObj == null) return null; return depObj.GetValue(FrameworkElement.DataContextProperty) ?? depObj.GetValue(FrameworkContentElement.DataContextProperty); } }
ce que je voudrais faire dans ce cas c'est reccuperer ma chaine et renvoyer juste un Upper de celle ci
si quelqu'un a une petite idée ....
merci
POUR INFO : je suis sur window 7 je ne peux donc pas utiliser le typography
Partager