Silverlight5 设计时的 MarkupExtension

3

我有一个简单的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文本中显示设计时数据?

非常感谢,

2个回答

5

尝试...

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

1
成功了!谢谢。 - Sam

1
你已经走了一半的路。对于这个(“按设计”)问题,有一些不错的解决方法:
使用接口IMarkupExtension,并从具有内容属性(例如ContentControl)的控件中派生。 现在监听“Parent”属性的变化(您可能需要使用一些棘手的附加属性),事件回调应该使用自己的自定义简单IProvideValueTarget实现来调用ProvideValue。ProvideValue的结果必须分配给“Content”属性。这不会影响运行时,因为ProvideValue将在控制之前评估,在设计时间内工作得很好。
我也在考虑在目标属性上安装绑定,从而将基类减少到FrameworkElement。
请参阅https://github.com/MrCircuit/XAMLMarkupExtensionshttps://github.com/MrCircuit/WPFLocalizationExtension以获取此过程的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接