我目前正在编写一个函数,该函数根据从C#中的API调用接收到的JSON信息在XAML中创建按钮(在运行时)。
我目前有以下代码:
Button downloadButton = new Button();
downloadButton.Click += new RoutedEventHandler(DownloadContent);
但我得到以下错误:
非静态字段、方法或属性'Mainwindow.DownloadContent(object,RoutedEventArgs)'需要对象指涉
我尝试将其更改为downloadButton.Click += new RoutedEventHandler(this, DownloadContent);
,但出现错误:Keyword 'this' is not valid in a static property, static method, or static field initializer
以下是DownloadContent
的外观,以供参考
private void DownloadContent(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadFileAsync(new Uri("API-URL"), contentZip);
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(InstallContent);
}
这就是我想要的按钮外观(跳过其他内容,如背景颜色等)
<Button Name="Downloadbutton"
Content="Download"
Click="DownloadContent"
</Button>
我是否遗漏了一些东西,比如为什么我会出现此错误以及如何修复它?
编辑
Installcontent函数如下所示:
private void InstallContent(object sender, AsyncCompletedEventArgs e)
{
ZipFile.ExtractToDirectory(contentZip, contentPath, true);
File.Delete(contentZip);
writeJsonData(DLCbuttonTag);
Downloadbutton.Visibility = Visibility.Collapsed;
Uninstallbutton.Visibility = Visibility.Visible;
}
创建按钮的函数:
public static void getContentList()
{
string jsonString = File.ReadAllText(@"C:\Users\stage\OneDrive\Documenten\ContentInfo.json")
ContentList contentList = JsonConvert.DeserializeObject<ContentList>(jsonString);;
for (int i = 0; i < contentList.Content.Count; i++)
{
StackPanel dynamicStackPanel = new StackPanel();
dynamicStackPanel.Orientation = Orientation.Horizontal;
dynamicStackPanel.Background = Brushes.Transparent;
Button downloadButton = new Button();
downloadButton.Click += new RoutedEventHandler(DownloadContent);
dynamicStackPanel.Children.Add(downloadButton);
}
}
1条答案
按热度按时间up9lanfz1#
问题是
getContentList
被声明为static
。您尝试引用示例方法DownloadContent
。请从getContentList
中删除static
以修复此错误。错误的原因是静态方法无法存取执行严修成员。静态成员不是在特定执行严修的内容中执行,而是在型别本身的内容中执行。虽然在WPF的情况下,很可能没有您网页的其他执行严修,但理论上可能有许多。静态方法不知道要选取哪个执行严修,因此发生错误。
有关静态成员的详细信息,请参见此link。
旁注:在C#中,方法通常以大写字母开头(Pascal大小写),而不管它们的访问修饰符是什么。2因此
getContentList
应该是GetContentList
。