У меня есть DataGrid, который имеет один столбец гиперссылок со следующим кодом:WPF 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>
Как вы можете видеть я использовать ContextMenu на клетках, чтобы получить их значения, используя следующий код:
//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);
}
Это явно не работает в столбце гиперссылки, так как это шаблонная колонка.
Есть ли работа arround, чтобы все еще получить ссылку, скопированную?
Я попытался использовать контекстное меню самой гиперссылки, но это не сработало, ссылки на объекты были неправильными.
Благодаря кучу,
С уважением,
-WtFudgE-
Да, что вы делаете, потому что это всего лишь текстовый блок. Но если я добавлю шаблон column с гиперссылкой в него, то это не сработает. – WtFudgE
Что такое текстовый блок? Я использовал ваш предоставленный XAML. –
Работает отлично для меня тоже здесь, используя образец кода «Wallstreet Programmer». Я нажимаю правой кнопкой мыши на ячейке гиперссылки, появляется контекстное меню, выберите «Копировать», а затем вставьте его где-нибудь. – SuperOli