将数据从Popup中的UserControl发送到父页面

时间:2014-01-21 23:15:00

标签: wpf xaml visual-c++ user-controls

我有一个Popup,它只是一个UserControl,它基本上只是一个填写“完成”按钮的表单。我找不到将数据从表单发送到页面的方法,以便我可以解析并使用数据来创建特定元素。基本上,当点击“完成”按钮时,我找不到发送甚至访问页面来存储数据的方法。

绑定似乎不是一种方式,因为当单击“完成”按钮时,页面会创建另一个UserControl,其中填充了从弹出窗体中的表单接收的数据。由于绑定似乎不适合我的问题,传递数据将是下一个,但由于我找不到引用页面的方法,我无法使这个解决方案工作。

Page就是这样:

<Button HorizontalAlignment="Left" Margin="227,115,0,0" VerticalAlignment="Top">
    <Popup IsLightDismissEnabled="True">
        <local:PopupMenu/>
    </Popup>
</Button>
<TextBox HorizontalAlignment="Left" Margin="230,340,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Height="55" Width="455"/>

UserControl基本上是:

<UserControl
x:Class="SimpleShop.PopupMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SimpleShop"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Height="800" Width="1295">
<TextBlock text="Enter A Number" Fontsize="24" TextWrapping="Wrap" Height="40" Width="200"  />
<TextBox x:Name="Number1" Text="0" TextWrapping="Wrap" Height="40" Width="200"  />
<TextBlock text="Enter A Number" Fontsize="24" TextWrapping="Wrap" Height="40" Width="200"  />
<TextBox x:Name="Number2" Text="0" TextWrapping="Wrap" Height="40" Width="200" />
<Button x:Name="AddItemButton" Content="Button" FontSize="24"  Height="40" Width="110" Click="AddItemButton_Click" />
</UserControl>

所以当按下页面上的按钮时会出现弹出窗口,输入2个数字并按下弹出窗口上的按钮后,页面上的文本框将被更新,并且输入的2个数字的结果将被乘以弹出窗口已关闭。我遇到的问题是按下弹出窗口上的按钮后更新页面上的文本框。我找不到指向或引用文本框的方法。

1 个答案:

答案 0 :(得分:0)

所以你需要两个部分:

  1. 弹出窗口关闭时的通知
  2. 访问弹出窗体的结果。
  3. 首先,考虑使用Closed事件,即:

    <Popup IsLightDismissEnabled="True" Closed="Popup_Closed">
        <local:PopupMenu x:Name="popupUserControl"/>
    </Popup>
    

    对于第二个,我只是在PopupMenu上公开了一个给你结果的属性。像这样:

    public partial class PopupMenu : UserControl
    {
        public double Result { get; private set; }
    
        public AddItemButton_Click(object sender, EventArgs e)
        {
            Result = double.Parse(Number1.Value) + double.Parse(Number2.Value);
        }
    }
    

    然后,您可以根据需要在Closed事件处理程序中设置文本:

    private void Popup_Closed(object sender, EventArgs e)
    {
        txtResult.Text = popupUserControl.Result.ToString();
    }