WPF学习笔记--向界面动态添加控件或者usercontrol
2011-05-29 00:40
561 查看
在做工控业界面时,运行时添加和编辑界面元素会给程序带来更大的灵活性,同时更能增加用户体验的好评度。
以下的例子代码实现:在应用程序界面需要更新时(如应用程序加载时)将存储于数据库的界面元素数据载入到UI当中,并且绑定一些事件或者菜单
前台代码:
<Canvas x:Name="AP_Plank" Height="3300" Width="2200"/>
后台代码:
/// <summary>
/// 将所有基站添加到系统界面当中
/// </summary>
void AddALlStationToUI()
{
BLL.Station SDB = new BLL.Station();
DataTable StationModelList = SDB.GetAll();
if (StationModelList.TableName != "正确")
{
//ConnectErorr("数据库连接错误:" + StationModelList.TableName);
//return 0;
}
if (StationModelList.Rows.Count < 1)
{
//ConnectErorr("数据库连接错误:从数据库未获取有效基站!");
//return 0;
}
for (int i = 0; i < StationModelList.Rows.Count; i++)
{
Station ap = new Station();
ap.IP = StationModelList.Rows[i]["IP"].ToString();
ap.ListenPort = Convert.ToInt16(StationModelList.Rows[i]["ListenPort"]);
ap.Coordinates_X = Convert.ToDouble(StationModelList.Rows[i]["Coordinates_X"]);
ap.Coordinates_Y = Convert.ToDouble(StationModelList.Rows[i]["Coordinates_Y"]);
ap.Coefficient_X = Convert.ToDouble(StationModelList.Rows[i]["Coefficient_X"]);
ap.Coefficient_Y = Convert.ToDouble(StationModelList.Rows[i]["Coefficient_Y"]);
ap.SN = StationModelList.Rows[i]["SN"].ToString();
ap.Remark = StationModelList.Rows[i]["Remark"].ToString();
ap.ID = new Guid(StationModelList.Rows[i]["ID"].ToString());
StationList.Add(ap);
UC.UC_AP UC_AP = new UC.UC_AP();
UC_AP.Tag = ap.ID;
System.Windows.Controls.ContextMenu contextmenu = new ContextMenu();
System.Windows.Controls.MenuItem MIViewStationInfor = new MenuItem();
MIViewStationInfor.Header = "查看详细信息";
MIViewStationInfor.Tag = ap.ID;
MIViewStationInfor.Click += new RoutedEventHandler(StationMenu_ViewStationInfor_Click);
contextmenu.Items.Add(MIViewStationInfor);
UC_AP.ContextMenu = contextmenu;
Canvas.SetTop(UC_AP, ap.Coordinates_Y);
Canvas.SetLeft(UC_AP, ap.Coordinates_X);
AP_Plank.Children.Add(UC_AP);
}
}
/// <summary>
/// 基站右键菜单(查看详细信息)事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void StationMenu_ViewStationInfor_Click(object sender, RoutedEventArgs e)
{
System.Windows.Controls.MenuItem MI = sender as System.Windows.Controls.MenuItem;
//此处可弹出窗口显示详细信息,同时可给窗口定义一个修改完成事件,当窗口修改完成时回刷主界面元素
MessageBox.Show(MI.Tag.ToString());
}
以下的例子代码实现:在应用程序界面需要更新时(如应用程序加载时)将存储于数据库的界面元素数据载入到UI当中,并且绑定一些事件或者菜单
前台代码:
<Canvas x:Name="AP_Plank" Height="3300" Width="2200"/>
后台代码:
/// <summary>
/// 将所有基站添加到系统界面当中
/// </summary>
void AddALlStationToUI()
{
BLL.Station SDB = new BLL.Station();
DataTable StationModelList = SDB.GetAll();
if (StationModelList.TableName != "正确")
{
//ConnectErorr("数据库连接错误:" + StationModelList.TableName);
//return 0;
}
if (StationModelList.Rows.Count < 1)
{
//ConnectErorr("数据库连接错误:从数据库未获取有效基站!");
//return 0;
}
for (int i = 0; i < StationModelList.Rows.Count; i++)
{
Station ap = new Station();
ap.IP = StationModelList.Rows[i]["IP"].ToString();
ap.ListenPort = Convert.ToInt16(StationModelList.Rows[i]["ListenPort"]);
ap.Coordinates_X = Convert.ToDouble(StationModelList.Rows[i]["Coordinates_X"]);
ap.Coordinates_Y = Convert.ToDouble(StationModelList.Rows[i]["Coordinates_Y"]);
ap.Coefficient_X = Convert.ToDouble(StationModelList.Rows[i]["Coefficient_X"]);
ap.Coefficient_Y = Convert.ToDouble(StationModelList.Rows[i]["Coefficient_Y"]);
ap.SN = StationModelList.Rows[i]["SN"].ToString();
ap.Remark = StationModelList.Rows[i]["Remark"].ToString();
ap.ID = new Guid(StationModelList.Rows[i]["ID"].ToString());
StationList.Add(ap);
UC.UC_AP UC_AP = new UC.UC_AP();
UC_AP.Tag = ap.ID;
System.Windows.Controls.ContextMenu contextmenu = new ContextMenu();
System.Windows.Controls.MenuItem MIViewStationInfor = new MenuItem();
MIViewStationInfor.Header = "查看详细信息";
MIViewStationInfor.Tag = ap.ID;
MIViewStationInfor.Click += new RoutedEventHandler(StationMenu_ViewStationInfor_Click);
contextmenu.Items.Add(MIViewStationInfor);
UC_AP.ContextMenu = contextmenu;
Canvas.SetTop(UC_AP, ap.Coordinates_Y);
Canvas.SetLeft(UC_AP, ap.Coordinates_X);
AP_Plank.Children.Add(UC_AP);
}
}
/// <summary>
/// 基站右键菜单(查看详细信息)事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void StationMenu_ViewStationInfor_Click(object sender, RoutedEventArgs e)
{
System.Windows.Controls.MenuItem MI = sender as System.Windows.Controls.MenuItem;
//此处可弹出窗口显示详细信息,同时可给窗口定义一个修改完成事件,当窗口修改完成时回刷主界面元素
MessageBox.Show(MI.Tag.ToString());
}
相关文章推荐
- WPF-学习笔记 将控件添加到Grid中的指定行指定列
- Android开发学习笔记:为动态添加的EditText控件绑定值改变监听事件
- WPF学习——制作一个简单的录入界面(1): 添加需要的控件
- head first C#学习笔记:构建动态控件2-UserControl方法
- WPF-学习笔记 动态修改控件Margin的值
- 学习笔记2-确认删除操作-动态添加元素、事件-用户注册界面
- C#开发学习笔记:Dev控件库的TreeList动态添加节点
- 【学习笔记】Android 动态添加控件 getlayoutparams 为空的问题
- iOS开发学习笔记 -- (二)动态添加控件和事件处理
- Android开发学习笔记:为动态添加的Spinner控件绑定数据源以及监听事件
- wpf GridView 动态添加 GridViewColumn 及绑定控件
- MFC学习笔记——CDialog(添加控件)
- cocos2d-x 菜鸟学习笔记七(界面控件之scrollView与tableView)
- C#开发学习笔记:动态绑定控件事件
- cocos2d-x 菜鸟学习笔记八(界面控件之CCControl控件)
- (WPF) MVVM: 动态添加控件及绑定。
- 动态添加XtraTabControl详细设置 DXperience学习笔记
- WPF感悟(3)——关于向窗体动态添加控件
- MFC学习笔记——解决:不能添加控件变量
- WPF中获取动态添加控件的ActualHeight和相对坐标