8

カスタム値コンバーターをアプリケーション リソースに追加しないようにする方法について尋ねる質問を見つけました。

最初にリソースとして定義することなく、WPF で値コンバーターを使用する

ただし、次の例のように、それをさらに一歩進めて、暗黙的なコンバーターを登録したいと思います。

<SolidColorBrush Color="Blue" />

ここでは、いくつかの暗黙的な「StringToSolidColorBrushConverter」が開始され、この例が機能すると想定しています。

次の例は機能しませ

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

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

これは、WPFがただColorToSolidColorBrushConverter拾って使用できるという暗黙の了解がないためだと思います。作成方法は知っていますが、バインディング式でコンバーターを指定せずに WPF が自動的に使用するように、どのように「登録」しますか?

4

1 に答える 1

4

ソースコードを見てみるとこんな感じ

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

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

変換は ColorConverter によって行われます。

また、

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

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

BrushConverter によって変換が行われる場所。

登録できる「暗黙の」変換はありません。これはすべて、適切な値コンバーターの型を持つ TypeConverter 属性を関連するプロパティまたはクラスに適用することによって行われます。

あなたの例では、使用する必要があります

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

<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock>
于 2012-04-17T17:29:46.793 に答える