WPF Datagrid 하이퍼 링크 마우스 오른쪽 버튼을 클릭하십시오
-
11-09-2019 - |
문제
다음 코드와 함께 하나의 하이퍼 링크 열이있는 DataGrid가 있습니다.
<dg:DataGrid Style="{StaticResource DataGridStyle}" x:Name="movieGrid"
ItemsSource="{Binding ElementName=This, Path=movieData}">
<dg:DataGrid.ContextMenu>
<ContextMenu Name="cm">
<MenuItem Header="Copy" Click="CopyCell_Click"/>
</ContextMenu>
</dg:DataGrid.ContextMenu>
<dg:DataGrid.Columns>
<dg:DataGridTemplateColumn x:Name="editColumn" Width="40" Header="Edit" CanUserResize="False">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit" Height="20" Tag="{Binding Path}" Click="Edit_Click"/>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
<dg:DataGridTextColumn x:Name="titleColumn" IsReadOnly="True" Binding="{Binding Title}" Header="Title" SortDirection="ascending" />
<dg:DataGridTextColumn Visibility="Collapsed" x:Name="titleDiffColumn" IsReadOnly="True" Binding="{Binding IMDBTitle}" Header="IMDBTitle" />
<dg:DataGridTextColumn x:Name="scoreColumn" IsReadOnly="True" Width="60" Binding="{Binding Score}" Header="Score" />
<dg:DataGridTextColumn x:Name="yearColumn" IsReadOnly="True" Width="60" Binding="{Binding Year}" Header="Year" />
<dg:DataGridTextColumn x:Name="genreColumn" IsReadOnly="True" Binding="{Binding Genre}" Header="Genre" />
<dg:DataGridTemplateColumn x:Name="linkColumn" Width="195" Header="Link">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Margin="3,0,0,0"><Hyperlink Tag="{Binding Link}" Click="Link_Click"><TextBlock Text="{Binding Link}"/></Hyperlink></TextBlock>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
<dg:DataGridCheckBoxColumn x:Name="seenColumn" Width="60" Binding="{Binding Seen}" Header="Seen"/>
</dg:DataGrid.Columns>
</dg:DataGrid>
알 수 있듯이 나는 다음 코드를 사용하여 셀에서 컨텍스트 만을 사용하여 값을 얻습니다.
//copy datagrid item
private void CopyCell_Click(object sender, RoutedEventArgs e)
{
DataRowView itemsSource = movieGrid.CurrentItem as DataRowView;
int index = movieGrid.CurrentColumn.DisplayIndex;
string cellValue = itemsSource.Row.ItemArray[index - 1].ToString();
Clipboard.SetData(DataFormats.Text, cellValue);
}
이것은 TemplateColumn이기 때문에 하이퍼 링크 열에서는 작동하지 않습니다.
여전히 링크를 복사 할 수있는 작업이 있습니까?
하이퍼 링크 자체의 컨텍스트 메뉴로 시도했지만 작동하지 않았으며 객체 참조가 잘못되었습니다.
무리 감사,
문안 인사,
-wtfudge-
해결책
사용자가 컨텍스트 메뉴를 열기 전에 복사 해야하는 셀을 선택하는 한 코드는 나에게 작동합니다. 아래 코드 뒤를 사용하여 테스트했습니다. 어떤 문제를보고 있습니까?
using System.Data;
using System.Windows;
namespace GridLinkTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
DataContext = this;
DataTable dataTable = new DataTable("MovieData");
dataTable.Columns.Add(new DataColumn("Title"));
dataTable.Columns.Add(new DataColumn("IMDBTitle"));
dataTable.Columns.Add(new DataColumn("Score"));
dataTable.Columns.Add(new DataColumn("Year"));
dataTable.Columns.Add(new DataColumn("Genre"));
dataTable.Columns.Add(new DataColumn("Link"));
dataTable.Columns.Add(new DataColumn("Seen"));
DataRow row = dataTable.NewRow();
row["Title"] = "Watchmen";
row["IMDBTitle"] = "Watchmen";
row["Score"] = 7.8;
row["Year"] = 2009;
row["Genre"] = "Action";
row["Seen"] = true;
row["Link"] = "www.imdb.com/title/tt0409459";
dataTable.Rows.Add(row);
movieData = new DataView(dataTable);
}
public DataView movieData { get; set;}
private void CopyCell_Click(object sender, RoutedEventArgs e)
{
DataRowView itemsSource = movieGrid.CurrentItem as DataRowView;
int index = movieGrid.CurrentColumn.DisplayIndex;
string cellValue = itemsSource.Row.ItemArray[index - 1].ToString();
Clipboard.SetData(DataFormats.Text, cellValue);
}
private void Edit_Click(object sender, RoutedEventArgs e) {}
private void Link_Click(object sender, RoutedEventArgs e) {}
}
}
제휴하지 않습니다 StackOverflow