Расширение разметки Silverlight5 во время разработки - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть простое 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 Text?

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

Ответы [ 2 ]

5 голосов
/ 28 декабря 2011

попробовать ..

<TextBlock DataContext="{my:HelloWorldMarkup}" Text="{Binding}" />
1 голос
/ 05 июня 2012

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

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

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

См. https://github.com/MrCircuit/XAMLMarkupExtensions и https://github.com/MrCircuit/WPFLocalizationExtension для примера этого процесса.

...