绑定到字符串类型的属性(" http://something.com ")时没问题.但是,我似乎在旧示例中已经看到直接绑定到Uri属性.
<dg:DataGridHyperlinkColumn IsReadOnly="True"
Header="Uri" Binding="{Binding Path=NavigURI}" />
Run Code Online (Sandbox Code Playgroud)
NavigURI是Uri.最近的文档似乎需要一个转换器
<DataGridHyperlinkColumn Header="Email" Binding="{Binding Email}" ContentBinding="{Binding Email, Converter={StaticResource EmailConverter}}" />
Run Code Online (Sandbox Code Playgroud)
我也尝试使用转换器,但无论是否有转换器列都是空的.调试显示传递给"Convert"方法的值始终为null.我的问题:如果出于任何原因我想要绑定到Uri属性,那么来自Codeplex的最新DataGrid是否可行?
ContentBinding属性可用于显示实际URL以外的文本.例如,如果我使用ProductName中友好的,人类可读的文本和ProductUri中的实际URL 绑定数据,我可能会这样做:
<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>
Run Code Online (Sandbox Code Playgroud)
在用于数据网格中MSDN示例代码,所述EmailConverter被剥出"的mailto:"与@和之后的所有,只显示所述mailto连结的用户名部分.但是,底层链接(HTML术语中的href属性)保持不变.因此,例如,可见文本可能是"mjgreen",但处理程序OnHyperlinkClick将收到"mailto:mjgreen@company.com"的NavigateUri属性.顺便说一下,获取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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7835 次 |
| 最近记录: |