sliverlight页面传值的问题

markdandan 2010-04-12 04:19:12
我有一个usercontrol的页面,在这个页面上当点击一个按钮的时候弹出controls:ChildWindow的页面,在 childwindow上有一个textbox,我想在usercontrol上取得这个textbox中的值,请问有什么办法吗,谢谢!!!
Usercontrol 页面的xaml

<UserControl x:Class="SilverlightApplicationStudy.OutForm.FormApplication" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel Orientation="Horizontal"> <Button x:Name="formtest" Content="OutPutForm" Width="100" Height="30" Background="DarkViolet" Click="formtest_Click" FontSize="14"></Button> </StackPanel> </Grid> </UserControl>



Usercontrol页面的xaml.cs

private void formtest_Click(object sender, RoutedEventArgs e) { FormChildWin formChildwin = new FormChildWin(); formChildwin.Show(); }


childwindow上的xaml

<controls:ChildWindow x:Class="SilverlightApplicationStudy.OutForm.FormChildWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
Title="FormChildWin"
Width="400" Height="300">
<stackPanel>
<TextBox x:Name="kaisei" Text="2010年12月25日" Width="200" Height="20" TextAlignment="Left"
Foreground="DeepPink"></TextBox>
<Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="0" />
<Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="0" />
</stackPanel>


childwindow上的xaml.cs

private void OKButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}


请问当点击childwindow上的OKButton的时候(这时候会返回上一Usercontrol页面),在返回之后,我怎样得到textbox的值?
...全文
282 12 打赏 收藏 转发到动态 举报
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianguohua 2011-12-20
  • 打赏
  • 举报
回复
还有具体点的
TimDavid 2010-04-13
  • 打赏
  • 举报
回复

private void formtest_Click(object sender, RoutedEventArgs e)
{
FormChildWin formChildwin = new FormChildWin();
formChildwin.Show();
formChildwin.Closed+=new EventHandler(formChildwin_Closed);//注册关闭事件。
}
void formChildwin_Closed(object sender, EventArgs e)
{
ChildWindow childWindow = sender as ChildWindow;
if (childWindow!= null)
{
TextBox text= childWindow.FindName("myTextBox") as TextBox;//要TextBox在 ChildWindow里面的的x:Name属性来查找
if (text != null)
{
formtest.Content = text.Text;
}
}
}

不好意思昨天做的太水了,主要我还有项目要搞。没经过测试就发布了,很对不住,今天早上特意找了个时间。偷偷的写完了它,在我Visual Studio 2008和Silverlight 3.0可以完全运行。
思路是:
1.注册子窗口关闭事件。
2.在事件中找出那个TextBox,就是靠FindName()这个方法,你的TextBox一定要有这个属性x:Name=“xxx”,找到之后就可以将他传出去在窗口关闭之前。
TimDavid 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xingjunli 的回复:]

做了个DMEO参考 巧用Delegate在SilverLight多个页面、控件中传递回调方法
[/Quote]
Good.
委托 又多学了一种方法。
xingjunli 2010-04-13
  • 打赏
  • 举报
回复
jv9 2010-04-12
  • 打赏
  • 举报
回复
上面大家给出的解决方法都不错,如果需要更详细的解释可以参考这篇文章,有实例代码下载。

Silverlight子窗口(ChildWindow)传递参数到父窗口演示


http://www.silverlightchina.net/html/tips/2009/1125/261.html
malin2670372 2010-04-12
  • 打赏
  • 举报
回复
在你的Usercontrol 上不是有FormChildWin 的实例吗?
在FormChildWin 委托的close事件中你可以去取你的p_text 内容。
FormChildWin .Closed += new EventHandler(FormChildWin _Closed);


like this:
C# codeif (formChildwin .DialogResult == true)
{
string startdate = formChildwin.p_text;
}
pojianbing 2010-04-12
  • 打赏
  • 举报
回复
1. 定义全局静态变量,单击ChildWindow 的ok按钮时将值保存在全局变量中,然后在FormApplication中直接使用即可.

2. 注册FormChildWin的Closed事件,代码如下:

private void formtest_Click(object sender, RoutedEventArgs e)
{
FormChildWin formChildwin = new FormChildWin();
formChildwin.Show();

formChildwin.Closed += new EventHandler(formChildwin_Closed);
}

void formChildwin_Closed(object sender, EventArgs e)
{
string outputText = (sender as FormChildWin).kaisei.Text;
}
海涵德 2010-04-12
  • 打赏
  • 举报
回复
有些错字修改一下
使用主题-观察者设计模式可以解决这个问题,如果你不熟悉这个设计模式,作为一个程序员希望你学习使用设计模式。如果需要观察者设计模式的具体代码我可以给你整理一下发给你。
这里就简单说明一下解决办法:
一、设计一个主题Subject,主题定义textbox变化事件,usercontrol和childwindow都作为观察者observer,当childwindows中的textbox变化时引起主题变化,在usercontrol中实现相应主题事件响应程序对应childwindows中textbox的变化,这样usercontrol可以动态地得到textbox的变化值。
二、另外可以在childwindow中设置一个属性(这里使用VB代码,因为我熟悉)
public readonly property ChildWindowTextBoxText as string
Get
Return textbox.text
End Get
Set(ByVal value As string)
textbox.text = value
End Set
end proerty
后者不能动态得到textbox的变化值。
海涵德 2010-04-12
  • 打赏
  • 举报
回复
使用主题-观察者设计模式可以解决这个问题,如果你不熟悉这个设计模式,作为一个程序员希望你学习使用设计模式。如果需要观察者设计模式的具体代码我可以给你整理一下发给你。
这里就简单说明一下解决办法:
一、设计一个主题Subject,usercontrol和childwindow都作为观察者observer,当childwindows中的textbox变化是引起主体变化,在usercontrol中实现相应的主题事件响应程序相应childwindows中textbox的变化,这样可以动态地得到textbox的变化值。
二、另外可以在childwindow中设置一个属性(这里使用VB代码,因为我熟悉)
public readonly property ChildWindowTextBoxText as string
Get
Return textbox.text
End Get
Set(ByVal value As string)
textbox.text = value
End Set
end proerty
后者不能动态得到textbox的变化值。


开心的冰屋 2010-04-12
  • 打赏
  • 举报
回复
private event Action<string> OnClickOkButtonHandler;

private void OKButton_Click(object sender, RoutedEventArgs e)
{
if(OnClickOkButtonHandler != null)
{
OnClickOkButtonHandler(kaisei.Text);
}
}

FormApplication 内部
private void OnClickOkButtonHandler(string p_text)
{
p_text即为内容
}
xingjunli 2010-04-12
  • 打赏
  • 举报
回复
为ChildWindow注册一个delegate方法,传递UserControl中的一个方法过去执行

8,707

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告