在我的第一个窗口中,我创建了一个函数,它将数据库中的所有数据作为动态按钮加载到堆栈面板内, 它被称为BindImageList()
public void BindImageList()
{
using (MySqlConnection conn = new MySqlConnection(constr))
{
conn.Open();
using (MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT GarmentName,Image FROM tblthesis", conn))
{
ds = new DataSet();
adapter.Fill(ds);
MainWindow mainWin = new MainWindow();
foreach (DataRow dataRow in ds.Tables[0].Rows)
{
var imageBuffer = (byte[])dataRow["Image"];
var bitmapImage = new BitmapImage();
using (var memoryStream = new MemoryStream(imageBuffer))
{
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
}
KinectTileButton button = new KinectTileButton();
button.BorderThickness = new Thickness(7, 7, 7, 7);
button.Background = new SolidColorBrush(Colors.Transparent);
button.Width = 185;
button.Height = 200;
button.Background = new ImageBrush(bitmapImage);
button.Click += button_Click;
mainWin.spDress.Children.Add(button);
}
mainWin.Show();
}
conn.Close();
}
}
Window3_loaded
{
BindImagelist();
}
当我从Window3_Loaded事件中插入代码时,当前正在我的MainWindow中添加按钮但是 当我从我的MainWindow中调用该函数时:
MainWindow_Loaded{
Window3 wewe = new Window3();
wewe.BindImageList();
}
它没有像我在window3的加载事件中插入代码时那样在我的堆栈面板中创建一个动态按钮,
但是当我这样做时
public void BindImageList()
{
messagebox.show(my text);
}
我的消息框正在显示。
感谢任何帮助。
答案 0 :(得分:0)
在整个项目中搜索Window3。如果您可以在屏幕上看到window3,则可能会有一个已创建的实例。使用该实例。
答案 1 :(得分:0)
您的代码无法正常工作,因为您创建了一个新的Window3实例。您需要Window1来调用当前显示的Window3实例的方法。你可以通过两个步骤来做到这一点:
在Window3.cs文件中定义Window3的静态字段以保存当前显示的实例。
public static Window3 Current; public Window3(){... Current = this;}
使用Window1中的静态字段来调用方法。
如果(Window3.Current!= NULL) Window3.Current.BindImageList();
这样,Window1将调用当前活动Window3上的方法,而不是现在未查看的新实例。
我希望有所帮助。