Open a hyperlink URI (www.google.com) in a web browser( IE or chrome) through code in C# WPF forms

北城余情 提交于 2021-01-27 17:50:29

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!