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