Свойство ContentBinding может использоваться для отображения текста, отличного от фактического URL. Например, если я связываю данные с понятным, понятным человеку текстом в ProductName и фактическим URL-адресом в ProductUri , я мог бы сделать это:
<DataGridHyperlinkColumn Name="productColumn"
Binding="{Binding Path=ProductUri}"
ContentBinding="{Binding Path=ProductName}"
Header="Product"
IsReadOnly="True"
Width="*">
<DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" />
</Style>
</DataGridHyperlinkColumn.ElementStyle>
В примере кода MSDN для DataGrid EmailConverter удаляет «mailto:» и @ и все после него и отображает только часть имени пользователя ссылки mailto. Однако базовая ссылка, атрибут href в терминах HTML, остается неизменной. Так, например, видимый текст может быть «mjgreen», но обработчик OnHyperlinkClick получит свойство NavigateUri «mailto: mjgreen@company.com». Код для получения NavigateUri, кстати, будет выглядеть так:
private void OnHyperlinkClick(object sender, RoutedEventArgs e)
{
var destination = ((Hyperlink)e.OriginalSource).NavigateUri;
Trace.WriteLine("Browsing to " + destination);
using (Process browser = new Process())
{
browser.StartInfo = new ProcessStartInfo
{
FileName = destination.ToString(),
UseShellExecute = true,
ErrorDialog = true
};
browser.Start();
}
}