0

文字列値が「http」で始まる場合、セルの内容をハイパーリンクに変換したい。列の値をハードコーディングしていることがわかった場合は、動的に機能する必要があり、多くの例があります。理想的には、コンテンツが「http」で始まる場合は、値コンバーターを使用してセルのコンテンツをハイパーリンクボタンに置​​き換えたいと思います。

    <esri:FeatureDataGrid x:Name="QueryDetailsDataGrid" Grid.Row="0"  Margin="0"
                        AutoGenerateColumns="False" CanUserSortColumns="True" 
                        VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
                        HeadersVisibility="Column" HorizontalScrollBarVisibility="Auto" 
                        SelectionChanged="QueryDetailsDataGrid_SelectionChanged"
                        LoadingRow="QueryDetailsDataGrid_LoadingRow"
                        Foreground="White" RowBackground="#555555"
                        AlternatingRowBackground="Black"
                        RowStyle="{StaticResource DataGridRowStyle}" >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click" SourceObject="{Binding ElementName=btnSave}">
                <actions:ExportTable />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <esri:FeatureDataGrid.Columns>
            <sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding , Converter={StaticResource LinkConverter}}" />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
        </esri:FeatureDataGrid.Columns>
    </esri:FeatureDataGrid>

コンバータ

Public Class LinkConverter
    Implements IValueConverter

    Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
        If value Is Nothing Then
            Return vbNull
            Exit Function
        End If
        Dim _value As String = TryCast(value, String)
        If _value Is Nothing Then
            Return value
        End If
        If _value.StartsWith("http") Then
            Dim hl As HyperlinkButton = New HyperlinkButton With {.NavigateUri = New Uri(_value)}
            Return hl
        Else
            Return value
        End If
    End Function

    Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
        Dim _value As String = TryCast(value, String)
        If _value.StartsWith("http") Then
            Dim hl As Hyperlink = New Hyperlink With {.NavigateUri = New Uri(_value)}
            Return hl
        Else

            Return value
        End If
    End Function
End Class

テキストをフレームワーク要素に置き換えようとしているため、これは機能しません。ちょっと、この方法でそれを行う方法について困惑しました....

4

1 に答える 1

1
  1. DataTemplateに2つのコントロール(TextBlockとHiperlink)を配置します。
  2. 「http」で始まるテキストの場合はVisibility.Visibleを返し、他のテキストの場合はVisibility.Collapsedを返すHttpVisibileコンバーターを作成します。このコンバーターを使用して、HiperlinkのVisibilityプロパティをテキストにバインドします。
  3. httpで始まるテキストに対してVisibility.Collapsedを返すHttpCollapedコンバーターを作成します。このコンバーターを使用して、TextBlockのVisibilityプロパティをテキストにバインドします

これらの3つの手順を使用すると、「http」で始まるすべてのテキストがハイパーリンクとして表示されるようになります。

<DataTemplate>
  <TextBlock Visibility="{Binding, Converter={StaticResource HttpCollapsedConverter}}" />
  <Hiperlink Visibility="{Binding, Converter={StaticResource HttpVisibleConverter}}" />
</DataTemplate>

必要に応じて、各コントロールのテキストプロパティをバインドします。

于 2012-04-11T05:56:19.617 に答える