简体   繁体   English

如何使gridview列超链接可单击并捕获事件?

[英]How to make gridview column hyperlink clickable and catch the event?

I have a gridview and I need to make my link column clickable and catch click event. 我有一个gridview,我需要使我的链接列可点击并捕获点击事件。

In hyperlink column I added this RequestNavigate="Hyperlink_RequestNavigate" but it doesn't work when I click to url link. 在超链接列中,我添加了此RequestNavigate =“ Hyperlink_RequestNavigate”,但是当我单击URL链接时它不起作用。

Please give me an advise 请给我一个建议

Here is my code 这是我的代码

    <Grid>
    <ListView Margin="10,52,12,61" Name="ListView1">
        <ListView.View>
            <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Authors" ColumnHeaderTemplate="{StaticResource OrangeHeaderTemplate}" >
                <!-- Add a ContextMenu to GridView Header -->
                <GridView.ColumnHeaderContextMenu>
                    <ContextMenu >
                        <MenuItem Header="Ascending" Click="MenuItem_Click" />
                        <MenuItem Header="Descending" />
                    </ContextMenu>
                </GridView.ColumnHeaderContextMenu>                  
                <!-- Add GridView Columns -->

                <GridViewColumn Header=" Link" Width="120" DisplayMemberBinding="{Binding Path=Url}" >

                    <GridViewColumn.CellTemplate>

                        <DataTemplate>
                            <TextBlock>
                                <Hyperlink NavigateUri="{Binding Path=URL}"   RequestNavigate="Hyperlink_RequestNavigate">
                                </Hyperlink>
                            </TextBlock>
                        </DataTemplate>

                    </GridViewColumn.CellTemplate>

                </GridViewColumn>

                <GridViewColumn Header=" Name" Width="120" DisplayMemberBinding="{Binding Path=Name}" />
                <GridViewColumn Header=" Age" Width="50" DisplayMemberBinding="{Binding Path=Age}" />
                <GridViewColumn Header=" Book" Width="250" DisplayMemberBinding="{Binding Path=Book}" />
                <GridViewColumn Header=" MVP" Width="50" DisplayMemberBinding="{Binding Path=MVP}" ></GridViewColumn>

            </GridView>
         </ListView.View>
    </ListView>  
</Grid>

C# code C#代码

        private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
    {
        Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
        e.Handled = true;
    }

    //

    private void CreateDynamicGridView()
    {
        // Create a GridView  
        GridView grdView = new GridView();
        grdView.AllowsColumnReorder = true;
        grdView.ColumnHeaderToolTip = "Authors";

        GridViewColumn nameColumn = new GridViewColumn();
        nameColumn.DisplayMemberBinding = new Binding("Name");
        nameColumn.Header = "Author Name";
        nameColumn.Width = 120;
        grdView.Columns.Add(nameColumn);

        GridViewColumn ageColumn = new GridViewColumn();
        ageColumn.DisplayMemberBinding = new Binding("Age");
        ageColumn.Header = "Age";
        ageColumn.Width = 30;
        grdView.Columns.Add(ageColumn);

        GridViewColumn bookColumn = new GridViewColumn();
        bookColumn.DisplayMemberBinding = new Binding("Book");
        bookColumn.Header = "Book";
        bookColumn.Width = 250;
        grdView.Columns.Add(bookColumn);

        GridViewColumn mvpColumn = new GridViewColumn();
        mvpColumn.DisplayMemberBinding = new Binding("Mvp");
        mvpColumn.Header = "Mvp";
        mvpColumn.Width = 50;
        grdView.Columns.Add(mvpColumn);

        ListView1.View = grdView;
    }


    private ArrayList AuthorsList()
    {
        ArrayList list = new ArrayList();
        list.Add(new Author("http://google.com", "Mahesh Chand", 30, "ADO.NET Programming", true));
        list.Add(new Author("http://facebook.com", "Mike Gold", 35, "Programming C#", true));
        list.Add(new Author("http://google.com", "Raj Kumar", 25, "WPF Cookbook", false));
        list.Add(new Author("http://ok.ru", "Tony Parker", 48, "VB.NET Coding", false));
        list.Add(new Author("http://mail.ru", "Renee Ward", 22, "Coding Standards", true));
        list.Add(new Author("http://ya.ru", "Praveen Kumar", 33, "Vista Development", false));

        return list;
    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {

    }
}


public class Author
{
    public Author(string url, string authorName, Int16 authorAge, string authorBook, bool authorMVP)
    {
        this.Url = url;
        this.Name = authorName;
        this.Age = authorAge;
        this.Book = authorBook;
        this.Mvp = authorMVP;
    }

    private string _url;
    public string Url
    {
        get { return _url; }
        set { _url = value; }
    }

    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private Int16 age;

    public Int16 Age
    {
        get { return age; }
        set { age = value; }
    }
    private string book;

    public string Book
    {
        get { return book; }
        set { book = value; }
    }
    private bool mvp;

    public bool Mvp
    {
        get { return mvp; }
        set { mvp = value; }
    }

}


Click Me 点击我

    private void Hyperlink_OnClick(object sender, RoutedEventArgs e)
    {
        var hl = e.OriginalSource as System.Windows.Documents.Hyperlink;
        Process.Start(hl.NavigateUri.AbsoluteUri);
    }

Or use Command="{Binding NavigateCommand}" instead Click event and CommandParameter="{Binding Path=URL}" instead NavigateUri 或使用Command =“ {Binding NavigateCommand}”代替Click事件,并使用CommandParameter =“ {Binding Path = URL}”代替NavigateUri

How to use Commands with MVVM Light 如何在MVVM Light中使用命令

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使GridView中的Username列成为电子邮件超链接并且可单击? - How to make the Username column in the GridView an email hyperlink and to be clickable? 如何通过 GridView 列值创建超链接? - How to make a hyperlink through GridView column value? 如何转换GridView中的Username列和电子邮件超链接(mailto),并可以使用GridView1_DataBound单击它? - How to convert the Username column in the GridView an email hyperlink (mailto) and to be clickable using GridView1_DataBound? 如何使任何列在动态gridview中超链接,其中该超链接列链接到另一个gridview - How to make any column hyperlinked in dynamic gridview , where that hyperlink column is linked to another gridview 如何将父级Gridview列中的子级Gridview列设置为超链接 - How to set the column of Child gridview in Parent gridview column to be hyperlink 如何从Gridview列内的超链接单击事件获取绑定数据 - How to get binding data back from Hyperlink click event inside a Gridview column 如何在没有数据字段的gridview中制作超链接? - how to make hyperlink in gridview without datafield? 如何将 gridview 中的列设置为自动生成的超链接 - How to set a column in gridview as hyperlink which is autogenerated 如何将超链接添加到动态gridview列 - How to add a Hyperlink to a dynamic gridview column 我怎样才能使gridview行可点击 - how can i make a gridview rows clickable
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM