Xaml
<Window x:Class="PortScanner.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Scanner Port" WindowStartupLocation="CenterScreen">
<ListView Name="listview_scaner" Margin="10">
<ListView.Resources>
<Style TargetType="{x:Type ListView}">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</Setter.Value>
</Setter>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Скопировать в буфер обмена"></MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Port ID" DisplayMemberBinding="{Binding Path=PortNumber}"
Width="150"/>
<GridViewColumn Header="Local Adress" DisplayMemberBinding="{Binding Path=Local}"
Width="250"/>
<GridViewColumn Header="Remote Adress" DisplayMemberBinding="{Binding Path=Remote}" Width="250"/>
<GridViewColumn Header="State" DisplayMemberBinding="{Binding Path=State}" Width="250"/>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</Window>
Создал контекстное меню, но не могу понять как сделать чтобы при нажатию на кнопку копировался в буфер обмена нужный текст из нужной колонки
Code:
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Windows;
using System.Windows.Controls;
namespace PortScanner
{
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
// this.CenterWindowOnScreen();
this.listview_scaner.ItemsSource = GetOpenPort();
}
private static List<PortInfo> GetOpenPort()
{
var properties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] tcpEndPoints = properties.GetActiveTcpListeners();
return properties.GetActiveTcpConnections().Select(p =>
{
return new PortInfo(p.LocalEndPoint.Port, $"{p.LocalEndPoint.Address}:{p.LocalEndPoint.Port}", $"{p.RemoteEndPoint.Address}:{p.RemoteEndPoint.Port}", p.State.ToString());
}).ToList();
}
private void CenterWindowOnScreen()
{
double screenWidth = SystemParameters.PrimaryScreenWidth;
double screenHeight = SystemParameters.PrimaryScreenHeight;
double windowWidth = this.Width;
double windowHeight = this.Height;
this.Left = (screenWidth / 2) - (windowWidth / 2);
this.Top = (screenHeight / 2) - (windowHeight / 2);
}
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
foreach (ListViewItem item in e.AddedItems.OfType<ListViewItem>())
{
Clipboard.SetText(item?.ToString());
}
}
catch { }
}
}
}
Используйте свойство ListView.SelectedItem
, которое в вашем случае будет хранить экземпляр выбранного PortInfo
:
XAML:
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Скопировать в буфер обмена" Click="MenuItem_Click"/>
</ContextMenu>
</ListView.ContextMenu>
Code-behind:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
if (listview_scaner.SelectedItem != null)
{
Clipboard.SetText(listview_scaner.SelectedItem.ToString());
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Сначала попробовал сделать так как в инструкции https://docsmicrosoft
Возможно ли написать код к примеру: Если ChartSeries[0] существует, то ввести Chart
Подскажите как оформить перенос строк в шапке datagrid (WPF) и отцентрировать содержимое заголовка по центру?
Есть таблица 'Отделы'Там хранятся имена и шифры отделов