1

起初这可能听起来很奇怪,但它相当简单。我在这个服务中有一个 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;
    }
}
4

1 回答 1

1

好吧,首先,我将 StudentID 放入 btnFindStudent.Tag

btnFindStudent.Tag = node.Element("StudentID").Value.ToString();

当 ClickEvent 被触发时,您可以从 Tag 中提取 ID 并将其发送到您的ThisUser UserControl。

String id = (String)((Button)sender).Tag;

我只需在 UserControl 中创建一个名为“StudentID”的公共属性并将其设置在那里。没有看到你的 UserControl 很难说。:(

更多信息:

将此添加到 ViewStudent:

#region StudentID

public static readonly DependencyProperty StudentIDProperty = DependencyProperty.Register("StudentID", typeof(String), typeof(ViewStudent), new PropertyMetadata(OnStudentIDChanged));

public string StudentID
{
    get { return (string)GetValue(StudentIDProperty); }
    set { SetValue(StudentIDProperty, value); }
}

static void OnStudentIDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    (d as ViewStudent).OnStudentIDChanged(e);
}

void OnStudentIDChanged(DependencyPropertyChangedEventArgs e)
{
    groupBox1.Header = StudentID;
    textBlock1.Text = StudentID;
}

#endregion

并摆脱我们之前创建的其他 StudentID 属性。

ViewStudent myUserControl = new ViewStudent();
myUserControl.StudentID = (String)((Button)sender).Tag;

试一试。(:

于 2012-04-19T17:12:37.357 回答