0

我在 ListView 中有一个 GridView 单元格,它被定义为一个 TextBlock 并绑定到我的 ViewModel 上的一个字符串。我希望能够以编程方式将部分文本更改为超链接并更改为不同的颜色。

这是 GridView 单元格的 XAML:

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <Border BorderThickness="2" BorderBrush="#dfdfdf" HorizontalAlignment="Stretch">
            <TextBlock Text="{Binding Data}" Margin="3"/>    
        </Border>
    </DataTemplate>
</GridViewColumn.CellTemplate>

这是目前的样子:

WPF 列表视图单元格

绑定的文本示例如下:

<color:#ff0000>Test item</color>
Test item 2
<link:http://www.google.com>Test hyperlink</link>

我对正则表达式解析绑定文本并提取所需信息没有任何问题,但是我将如何将 TextBlock 更改为不同的颜色并添加超链接?

提前致谢

4

2 回答 2

1

您可以将多个Run元素放在 TextBlock 中,然后根据需要设置样式。

这是一个带有工作超链接的示例,它甚至支持 MVVM :)

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <Border BorderThickness="2" BorderBrush="#dfdfdf" HorizontalAlignment="Stretch">
        <TextBlock  Margin="3">
            <Run Text="{Binding Data}" />
            <Run Text="Some more data" Background="Red" />
            <Run Text="Click Me" Foreground="Blue" TextDecorations="Underline" >
                <i:Interaction.Triggers>
                   <i:EventTrigger EventName="MouseDown">
                      <local:EventToCommand Command="{Binding LinkClickCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" />
                   </i:EventTrigger>   
                 </i:Interaction.Triggers>

            </Run>
        </TextBlock>
        </Border>
    </DataTemplate>
</GridViewColumn.CellTemplate>

注意:Interaction.Triggers来自System.Windows.InteractivityEventToCommand来自 MVVMLight。

于 2012-12-16T17:29:05.657 回答
0

类似于 Blachshma 的回答,但在Run对象中使用了超链接:

<TextBlock>
  <Run Text="{Binding Data}" />
  <Run Text="Some more data" Background="Red" />
  <Hyperlink Command="{Binding Path=Command}">
    <TextBlock Text="{Binding Path=Text}"/>
  </Hyperlink>
</TextBlock>

显然,我有一个CommandText属性要绑定到超链接。看起来完全一样,但也会响应命令的CanExecute谓词(超链接变灰)。

于 2012-12-16T19:42:24.250 回答