WPF: How do I register additional implicit value converters?

泪湿孤枕 提交于 2019-12-21 12:40:01

问题


I found a question asking about ways to avoid adding custom value converters to one's application resources:

Using Value Converters in WPF without having to define them as resources first

However I'd like to go one step beyond that and register converters that are then implicit, as in this example:

<SolidColorBrush Color="Blue" />

Here, I am assuming that some implicit "StringToSolidColorBrushConverter" is kicking-in that makes the example work.

This example does not work:

<Window.Resources>
    <Color x:Key="ForegroundFontColor">Blue</Color>
</Window.Resources>

<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock>

I believe that's because there is no implcit ColorToSolidColorBrushConverter that WPF can just pick up and use. I know how to create one, but how would I "register" it so that WPF uses it automagically without specifying the converter in the binding expression at all?


回答1:


If you look at the source code you'll find this

public sealed class SolidColorBrush : Brush
{
  public Color Color
  { ... }
  ...
}

[TypeConverter(typeof (ColorConverter))]
public struct Color : IFormattable, IEquatable<Color>
{
    ...
}

The conversion is done by the ColorConverter.

And also

[TypeConverter(typeof (BrushConverter))]
public abstract class Brush : Animatable, IFormattable, DUCE.IResource
{ ... }

public class TextBlock : ...
{  
   public Brush Foreground
   { ... }
}

Where the conversion is done by BrushConverter.

There's no 'implicit' conversion that you can register. It's all done by applying TypeConverter attributes with the type of the appropriate value converter to relevant properties or classes.

In your example you need to use

<Window.Resources>
    <SolidColorBrush x:Key="ForegroundFontColor" Color="Blue"/>
</Window.Resources>

<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock>


来源:https://stackoverflow.com/questions/10195257/wpf-how-do-i-register-additional-implicit-value-converters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!