我已经犯了一些不会带来错误或警告的东西,但让我感到难过。我的知识水平是新手,所以请耐心等待。
在编写一个小型WPF应用程序以从Twitch获取数据时,我需要一个堆栈面板,动态地将用户控件添加为子项,但在执行代码时,堆栈面板中不会显示任何内容。
我认为问题可能是添加孩子的调用来自另一个线程,但在测试之后,即使在同一个线程上,添加也不起作用。
我以前从来没有在应用中使用过用户控件,所以我很好奇这是否是问题所在,但经过将近两天的尝试找到问题后我感到好奇过来。我知道它一定是一个简单的错误。如果我的代码难以阅读,请提前道歉 - 对变量和方法使用长描述性名称。
以下是代码:
首先,应用程序的艰苦工作是在一个单独的线程上完成的,如下所示:
Thread main_work_thread = new Thread(new ThreadStart(do_main_work));
main_work_thread.IsBackground = false;
main_work_thread.Start();
通过石英作业(触发器按预期工作)将儿童添加到面板中:
public virtual void Execute(IJobExecutionContext context)
{
List<twitch_api.Stream> online_streamers = App.twitch_interface.get_followed_channels_data().streams;
foreach (twitch_api.Stream streamer in online_streamers)
{
// ...collect data
// display data in window
App.Current.Dispatcher.Invoke((Action)(() =>
{
((MainWindow)App.Current.MainWindow).favourite_streamer_stack_clear();
((MainWindow)App.Current.MainWindow).add_streamer_to_favourite_stack(streamer_detail);
}));
}
}
以下是在MainWindow中调用的方法:
public void add_streamer_to_favourite_stack(favourite_streamer_list_item_data new_streamer)
{
favourite_streamer_stack.Children.Add(new favourite_streamer_list_item_control(new_streamer));
}
public void favourite_streamer_stack_clear()
{
favourite_streamer_stack.Children.Clear();
}
以下是用户控件背后的代码:我试图添加:
public partial class favourite_streamer_list_item_control : UserControl
{
public favourite_streamer_list_item_data my_streamer_data { get; set; }
public favourite_streamer_list_item_control()
{
InitializeComponent();
}
public favourite_streamer_list_item_control(favourite_streamer_list_item_data new_streamer_data)
{
this.my_streamer_data = new_streamer_data;
}
private void favourite_streamer_stack_item_Loaded(object sender, RoutedEventArgs e)
{
// update controls with the data
this.streamer_avatar.Source = my_streamer_data.streamer_logo_bitmap;
this.textblock_streamer_name.Text = my_streamer_data.streamer_name;
this.textblock_game.Text = my_streamer_data.stream_game;
this.textblock_title.Text = my_streamer_data.stream_title;
}
}
非常感谢你的时间。
答案 0 :(得分:0)
您需要在无参数构造函数中调用InitializeComponent();
。没有这个呼叫,控制器就不会被渲染。
public favourite_streamer_list_item_control(favourite_streamer_list_item_data new_streamer_data)
{
InitializeComponent();
this.my_streamer_data = new_streamer_data;
}