起初这可能听起来很奇怪,但它相当简单。我在这个服务中有一个 wcf webservice(restful)我设置了一些通用的“用户”字段,我设置的字段之一是用户 ID,每次添加用户时都会增加。所有非常简单的东西。
然后我有一个正在使用的 wpf 应用程序。对于我的 web 服务中上面提到的每个用户,我动态设置内容以在我的 wpf 应用程序中保存每个用户,这是通过单击按钮完成的,然后加载内容区域,其中包含整齐排列的组框和文本块(同样非常简单)。我保存它们的容器是 GroupBox.Header,它包含用户 ID 和 Textblock,它等于学生的名字和姓氏。
像这样:
private void button1_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
PanelMainContent.Children.Clear();
MainArea1.Children.Clear();
string uriGroups = "http://localhost:8000/Service/Student";
XDocument xDoc = XDocument.Load(uriGroups);
var sortedXdoc = xDoc.Descendants("Student")
.OrderByDescending(x => Convert.ToDateTime(x.Element("TimeAdded").Value));
foreach (var node in xDoc.Descendants("Student").OrderByDescending(x => Convert.ToDateTime(x.Element("TimeAdded").Value)))
{
GroupBox groupbox = new GroupBox();
groupbox.Header = String.Format(node.Element("StudentID").Value);
App.Current.Properties["groupboxHeader"] = groupbox.Header;
groupbox.Width = 100;
groupbox.Height = 100;
groupbox.Margin = new Thickness(1);
Button btnFindStudent = new Button();
btnFindStudent.Click += this.btnGeneral_Click;
btnFindStudent.Name = Convert.ToString("btnViewStudent");
btnFindStudent.Tag = Convert.ToString("ViewStudent");
btnFindStudent.Content = Convert.ToString("View");
btnFindStudent.HorizontalAlignment = HorizontalAlignment.Right;
btnFindStudent.Height = 20;
btnFindStudent.Width = 36;
TextBlock textBlock = new TextBlock();
textBlock.Text = String.Format(node.Element("FirstName").Value + " " + (node.Element("LastName").Value));
textBlock.TextAlignment = TextAlignment.Center;
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = (DateTime.Parse(node.Element("TimeAdded").Value)).ToString("d");
String.Format("{0:d/M/yyyy}", DateTime.Parse(node.Element("TimeAdded").Value));
textBlock1.TextAlignment = TextAlignment.Center;
textBlock1.VerticalAlignment = VerticalAlignment.Bottom;
StackPanel stackPanel = new StackPanel();
stackPanel.Children.Add(groupbox);
stackPanel.Children.Add(btnFindStudent);
stackPanel.Children.Add(textBlock);
stackPanel.Children.Add(textBlock1);
stackPanel.Margin = new Thickness(5);
stackPanel.MouseEnter += new MouseEventHandler(stackpanel_MouseEnter);
stackPanel.MouseLeave += new MouseEventHandler(stackpanel_MouseLeave);
MainArea1.Children.Add(stackPanel);
}
}
输出如下所示:
注意GroupBox.header
用户 ID 的状态。
所以这给我带来了问题……如果您在图像中注意到我还动态设置了一个按钮(上面的代码)。此按钮加载名为ThisUser
:) 的用户控件应用程序,但我遇到的问题是能够:
1)首先获取当前点击的学生的 GroupBox.Header(UserID) (由 Darins 解决,答案如下)
2)将该用户ID发送到用户控件“ThisUser”
解释问题1):
查看上面的代码有一种方法可以“获取”已单击该用户的groubox.header(我的应用程序图像中的“查看”按钮)
对于问题2)
不知何故,从我当前的应用程序“发送”到用户控件“ThisUser”或“使可用”,供用户控件使用。
我希望这很好,很清楚,并且布置得很好,可以提供最好的答案,如果你还有什么想知道的(代码,解释),请不要犹豫。
在 btnGeneralClick(查看按钮)上发送数据的代码:
public FindStudent()
{
InitializeComponent();
}
private void btnGeneral_Click(object sender, RoutedEventArgs e)
{
ViewStudent myusercontrol = new ViewStudent();
String id = (String)((Button)sender).Tag;
myusercontrol.StudentID = id;
PanelMainContent.Children.Add(myusercontrol);
}
用户控制:
public partial class ViewStudent : UserControl
{
public ViewStudent()
{
InitializeComponent();
}
private string _studentID;
public string StudentID
{
get
{
return _studentID;
}
set
{
_studentID = value;
}
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
groupBox1.Header = StudentID;
//or
textBlock1.Text = StudentID;
}
}