我遇到了编译代码后出现错误的问题,该错误给了我以下错误: “元素“MainWindow”不包含“RssItemsListBox_MouseDoubleClick”的定义,并且未找到采用“MainWindow”类型的第一个参数的可用扩展方法“RssItemsListBox_MouseDoubleClick”(是否缺少 using 指令或集合引用?)。
我不明白他的意思,我该怎么办? :-(
恳请您的支持和帮助,预先感谢您并致以诚挚的问候! :-)
我尝试制作一个 RSS 聚合器
namespace Super_RSS
{
internal class Class1
{
public string Title { get; set; }
public string Link { get; set; }
}
}
<Window x:Class="Super_RSS.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Super_RSS"
mc:Ignorable="d"
Title="News Rss" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox x:Name="RssUrlTextBox" Grid.Row="0" Margin="10" Width="400" Height="25" Text="https://example.com/rss"/>
<Button Content="Load RSS" Grid.Row="0" Margin="670,10,0,10" Width="100" Height="25" Click="LoadRssButton_Click" HorizontalAlignment="Left" d:LayoutOverrides="Width"/>
<ListBox x:Name="RssItemsListBox" Grid.Row="1" Margin="10" DisplayMemberPath="Title" MouseDoubleClick="RssItemsListBox_MouseDoubleClick" />
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows;
using System.Xml.Linq;
namespace Super_RSS
{
/// <summary>
/// Logika interakcji dla klasy MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private List<string> items = new List<string>();
public MainWindow()
{
InitializeComponent();
}
private async void LoadRssButton_Click(object sender, RoutedEventArgs e)
{
string rssUrl = RssUrlTextBox.Text;
var rss = new RssReader();
var items = await rss.Read(rssUrl);
RssItemsListBox.ItemsSource = items;
}
private async Task<List<string>> LoadRss(string rssUrl)
{
try
{
using (HttpClient client = new HttpClient())
{
string rssData = await client.GetStringAsync(rssUrl);
XDocument doc = XDocument.Parse(rssData);
foreach (var item in doc.Descendants("item"))
{
string title = item.Element("title")?.Value;
items.Add(title);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error loading RSS feed: " + ex.Message);
}
return items;
}
}
}
internal class RssReader
{
private object SelectedItem;
public object RssItemsListBox { get; private set; }
internal async Task<IEnumerable<string>> Read(string rssUrl)
{
List<string> items = new List<string>();
try
{
using (HttpClient client = new HttpClient())
{
string rssData = await client.GetStringAsync(rssUrl);
XDocument doc = XDocument.Parse(rssData);
foreach (var item in doc.Descendants("item"))
{
string title = item.Element("title")?.Value;
items.Add(title);
}
}
}
catch (Exception)
{
// Handle exceptions
}
return items;
}
private void RssItemsListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if (RssItemsListBox is System.Windows.Controls.ListBox listBox && listBox.SelectedItem is RssItem selectedItem)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = selectedItem.Link,
UseShellExecute = true
});
}
}
}
你问:
当由于与 UI 交互而“发生某些事情”时,会触发类似给我以下错误的代码[...]我不明白他的意思...
ListBox.MouseDoubleClick
或 Button.Click
的事件
。当在 xaml 中订阅事件时,如您所示,后面的代码(即您的
MainWindow
类)中需要有一个相应的方法(handler),您可以在其中指定您想要响应发生的情况.
...我该怎么办...您可以通过在
MainWindow
类中添加必要的处理程序来避免编译错误。您需要的是具有此签名的方法:
public partial class MainWindow : Window
{
.
.
.
private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
}
}
添加此功能的更简单方法之一是右键单击 xaml 中的方法名称,然后在上下文菜单中选择 转到定义。