Вопрос

У меня простое imarkupextension следующим образом:

public class HelloWorldMarkup : IMarkupExtension<string>
{
    public string ProvideValue(IServiceProvider serviceProvider)
    {
        return "Hello World";
    }
    public override string ToString()
    {
        return "DesignTime Hello World";
    }
}

И мой XAML, который использует это так ..

<StackPanel>
    <TextBlock Text="{my:HelloWorldMarkup}" />
    <HyperlinkButton Content="{my:HelloWorldMarkup}" />
</StackPanel>

Во время выполнения все работает, как и ожидалось.

Однако во время дизайна содержание гиперссылки показывает значения времени дизайна (от ToString), но текст TextBlock не показывает.

Если я оставлю это так, мой дизайнер будет ко мне в течение нескольких дней.

Большое спасибо,

Это было полезно?

Решение

пытаться..

<TextBlock DataContext="{my:HelloWorldMarkup}" Text="{Binding}" />

Другие советы

Вы на полпути на правильной трассе. В этой проблеме («по дизайну» есть хороший обходной путь:

Используйте интерфейс imarkupextension и вытекайте из некоторого контроля с свойством контента (например, ContentControl). Теперь послушайте изменения в свойстве «родитель» (возможно, вам придется использовать какой -то сложный обходной путь, используя прикрепленные свойства). Затем обратный вызов событий должен позвонить по себе самостоятельно, используя пользовательскую простую реализацию iprovidevaluetarget. Результат предоставления вывода должен быть назначен свойству «контента». Это не влияет на время выполнения, так как предоставленная стоимость будет оцениваться перед контролем и работает как очарование в время дизайна.

Я также думаю о установке привязки на целевое свойство, таким образом, уменьшит базовый класс до FrameworkElement.

Ссылаться на https://github.com/mrcircuit/xamlmarkupextensions а также https://github.com/mrcircuit/wpflocalizationextension Для примера этого процесса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top