Nei*_*ell 7 .net wpf ivalueconverter
我发现了一个问题,询问如何避免向自己的应用程序资源添加自定义值转换器:
但是我想超越它并注册那些隐含的转换器,如下例所示:
<SolidColorBrush Color="Blue" />
Run Code Online (Sandbox Code Playgroud)
在这里,我假设一些隐含的"StringToSolidColorBrushConverter"正在踢,这使得示例工作.
这个例子并不能正常工作:
<Window.Resources>
<Color x:Key="ForegroundFontColor">Blue</Color>
</Window.Resources>
<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我相信这是因为没有任何证据ColorToSolidColorBrushConverter表明WPF可以拿起并使用它.我知道如何创建一个,但是如何"注册"它以便WPF自动使用它而不在绑定表达式中指定转换器?
如果你查看源代码你会发现这个
public sealed class SolidColorBrush : Brush
{
public Color Color
{ ... }
...
}
[TypeConverter(typeof (ColorConverter))]
public struct Color : IFormattable, IEquatable<Color>
{
...
}
Run Code Online (Sandbox Code Playgroud)
转换由 ColorConverter 完成。
并且
[TypeConverter(typeof (BrushConverter))]
public abstract class Brush : Animatable, IFormattable, DUCE.IResource
{ ... }
public class TextBlock : ...
{
public Brush Foreground
{ ... }
}
Run Code Online (Sandbox Code Playgroud)
其中转换是由BrushConverter完成的。
您无法注册任何“隐式”转换。这一切都是通过将具有适当值转换器类型的 TypeConverter 属性应用到相关属性或类来完成的。
在你的例子中你需要使用
<Window.Resources>
<SolidColorBrush x:Key="ForegroundFontColor" Color="Blue"/>
</Window.Resources>
<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |