【问题标题】:Using WPFToolKit's DataGridHyperlinkColumn使用 WPFToolKit 的 DataGridHyperlinkColumn
【发布时间】:2010-10-13 16:17:09
【问题描述】:

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

我该怎么做?我究竟做错了什么?

Xaml:

<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

【问题讨论】:

标签: wpf vb.net xaml datagrid wpftoolkit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      DirectCast(DirectCast(DirectCast(e.Source, System.Object), System.Windows.Documents.Hyperlink).DataContext, System.Object)
      

      【讨论】:

        猜你喜欢
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-18
        • 2013-10-30
        • 2010-12-17
        • 1970-01-01
        • 2019-01-31
        相关资源
        最近更新 更多