4

我正在使用 WPFToolkit 的 Datagrid 控件。我可以填充数据网格,但我遇到了 DataGridHyperlinkColumn 的问题。我希望它将链接直观地显示为人员的名称,但链接可以转到 UriLink 的值。

我怎样才能做到这一点?我究竟做错了什么?

xml:

<dg:DataGridHyperlinkColumn Header="Person Name" Width="200" 
Binding="{Binding Path=PersonName}" IsReadOnly="True" 
TargetName="{Binding Path=UriLink}"></dg:DataGridHyperlinkColumn>

或者,我宁愿放置一个事件处理程序,并创建要导航到的页面对象,但我似乎无法从事件的两个参数(在本例中为 o 和 e)中提取任何数据,其中 obj1/obj2是单击的超链接行的对象/变量。

替代 Xaml:

<dg:DataGridHyperlinkColumn Header="Person Name" Width="200" 
Binding="{Binding Path=PersonName}" IsReadOnly="True" 
TargetName="{Binding Path=UriLink}">
    <dg:DataGridHyperlinkColumn.ElementStyle>
    <Style TargetType="TextBlock">
    <EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" />
    </Style>
    </dg:DataGridHyperlinkColumn.ElementStyle>
    </dg:DataGridHyperlinkColumn>

VB 代码(用于替代 Xaml):

Private Sub OnHyperlinkClick(ByVal o As Object, ByVal e As RoutedEventArgs)

        'TODO: Create page to navigate to
        Dim page As New RedirectPage(obj1, obj2)
        Me.NavigationService.Navigate(page)

End Sub
4

3 回答 3

3

将 o 转换为 TextBlock,它的 DataContext 是您的行的对象。您可以将其转换为您的对象类型。

于 2009-03-25T19:03:22.840 回答
0

也许Hyperlink.RequestNavigate事件会更好?看起来EventArgs包含导航目标的URI,应该是超链接控件本身的URI。

于 2009-03-21T23:34:06.403 回答
0

正如 AKCODEr 所说,它在 DataContext 中。使用 OnHyperlinkClick 事件处理程序,我使用了以下内容:

DirectCast(DirectCast(DirectCast(e.Source, System.Object), System.Windows.Documents.Hyperlink).DataContext, System.Object)
于 2009-04-06T13:47:39.110 回答