Вопрос по wpf, .net – WPF: Как мне зарегистрировать дополнительные неявные преобразователи значений?

7

Я нашел вопрос, спрашивающий о способах избежать добавления пользовательских преобразователей значений в ресурсы одного из приложений:

Использование преобразователей значений в WPF без необходимости сначала определять их как ресурсы

Однако я хотел бы пойти дальше и зарегистрировать преобразователи, которые затем будут неявными, как в этом примере:

<SolidColorBrush Color="Blue" />

Здесь я предполагаю, что некоторые неявные & quot; StringToSolidColorBrushConverter & quot; пинает, что делает пример работы.

Этот пример делаетnot Работа:

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

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

Я полагаю, что это потому, чтоColorToSolidColorBrushConverter что WPF можно просто взять и использовать. Я знаю, как его создать, но как бы я "зарегистрировался"? это так, что WPF использует его автоматически без указания конвертера в выражении привязки?

Тотfeature is provided via TypeConvertersи я не совсем уверен, что вы можете внедрить его во время выполнения в разумной манере, так как для этого требуются атрибуты классов или свойств, которыми вы не владеете. user7116

Ваш Ответ

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>

Похожие вопросы