如何解决显示组合框上的所有进程
此处是屏幕截图的样子。只是空着。
XAML:
ComboBox Name="comboBox" RenderTransformOrigin="0.502,-0.751" Margin="129,112,111,217" SelectionChanged="comboBox_SelectionChanged"/>
C#:
{
public MainWindow()
{
InitializeComponent();
}
private void comboBox_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
comboBox.Items.Clear();
Process[] MyProcess = Process.GetProcesses();
for (int i = 1; i < MyProcess.Length; i++)
comboBox.Items.Add(string.Format("{0} - {1}",MyProcess[i].ProcessName,MyProcess[i].Id));
}
}
解决方法
SelectionChanged
事件不起作用,因为它仅在选择更改时才触发。您可以改用DropDownOpened
事件。
ComboBox Name="comboBox" RenderTransformOrigin="0.502,-0.751" Margin="129,112,111,217" DropDownOpened="ComboBox_OnDropDownOpened"/>
您的事件处理程序将如下所示:
private void ComboBox_OnDropDownOpened(object? sender,EventArgs e)
{
comboBox.Items.Clear();
var processes = Process.GetProcesses();
for (var i = 1; i < processes.Length; i++)
comboBox.Items.Add($"{processes[i].ProcessName} - {processes[i].Id}");
}
另一种方法是公开在构造函数中初始化并绑定到XAML中ItemsSource
的{{1}}的进程集合。然后您可以根据需要更新集合,例如通过计时器或用户触发的命令定期更新。
您可以采用以下选项之一来实施集合:
- 替换整个集合,这需要实现
INotifyPropertyChanged
并在更新流程时引发PropertyChanged
事件 - 使用
ObservableCollection<T>
来存储进程并通过修改集合来更新进程,例如添加和删除流程或清除流程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。