在ControlTemplate中使用带有TextBlock的ContentStringFormat属性

时间:2009-01-09 10:07:14

标签: wpf xaml

我有一个简单的按钮ControlTemplate,可以为它们创建类似链接的外观:

 <ControlTemplate x:Key="LinkTemplate" TargetType="{x:Type Button}">
    <TextBlock Text="{TemplateBinding Content}">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Foreground" Value="Blue" />
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="TextDecorations" Value="Underline" />
                        <Setter Property="Cursor" Value="Hand" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Foreground" Value="Gray" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</ControlTemplate>

这很好用,但是当我想使用ContentStringFormat属性来格式化按钮的内容时会出现问题。由于TextBlock没有ContentStringFormat属性,因此无法使用模板绑定。

我还尝试在绑定按钮的内容时使用StringFormat,但它似乎被忽略,原始内容文本在模板绑定中传递给TextBlock。

我想我可以使用转换后的值并将ContentStringFormat作为参数传递给它,但感觉不对。

有没有办法使用纯XAML执行此操作,还是应该使用值转换器?

2 个答案:

答案 0 :(得分:2)

我不知道ContentStringFormat的用法是什么,但您可以使用ContentPresenter而不是TextBlock来使用此属性。

答案 1 :(得分:0)

我没有找到“ContentStringFormat”的文档,所以我可能会遗漏一些简单的东西。

如何在ControlTemplate中使用Fil Forte的BindableRun,以便可以格式化Run。 Lubo Blagoev已经创建了一个控件,可以做到这一点。