问题
Im working on a project which has hyperlinks in it. I used DataGridHyperlinkColumn to populate the URI's in a single column. Whenever I click on a URI, it gets opened in both browser and the wpf window. I could prevent the URI opening in web browser by using hyperlink.RequestNavigate().
but I need the URI to be opened only in web browser and not in the WPF window. I have attached my XAML and C# code below.
<DataGrid Name="dgUsers" AutoGenerateColumns="False" CanUserAddRows="False" BorderThickness="0" CanUserResizeRows="False" GridLinesVisibility="None" HeadersVisibility="None" Focusable="False" Visibility="{Binding DgVisibility}">
<DataGrid.Resources>
<Style TargetType="Hyperlink">
<EventSetter Event="Click" Handler="DG_Hyperlink_Click"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridHyperlinkColumn Binding="{Binding WebSite}" Width="*" CanUserResize="False" CanUserSort="False" IsReadOnly="True" >
<DataGridHyperlinkColumn.ElementStyle>
<Style>
<!--EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/-->
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
</DataGrid.Columns>
</DataGrid>
C# Code Follows below.
public MainWindow()
{
InitializeComponent();
List<User> users = new List<User>();
users.Add(new User() { WebSite = new Uri("http://www.google.com") });
users.Add(new User() { WebSite = new Uri("http://www.yahoo.com") });
users.Add(new User() { WebSite = new Uri("http://www.gmail.com") });
//DgVisibility = Visibility.Hidden;
//userslink = users;
dgUsers.ItemsSource = users;
}
public class User
{
public Uri WebSite { get; set; }
}
private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
{
Hyperlink link = (Hyperlink)e.OriginalSource;
Process.Start(new ProcessStartInfo(link.NavigateUri.AbsoluteUri));
}
Thanks in advance.
回答1:
Copied from comments:
Use text column with custom template containing text only, with interaction trigger to bind mouse click to a handler.
Add a style with Foreground set to red/blue on MouseOver trigger to mimic url look and feel. This is basically what Hyperlink control does.
来源:https://stackoverflow.com/questions/37429964/open-a-hyperlink-uri-www-google-com-in-a-web-browser-ie-or-chrome-through-co