首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

sliverlight页面传值的有关问题

2012-03-12 
sliverlight页面传值的问题我有一个usercontrol的页面,在这个页面上当点击一个按钮的时候弹出controls:Chi

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

HTML code
<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
C# code
 private void formtest_Click(object sender, RoutedEventArgs e) { FormChildWin formChildwin = new FormChildWin(); formChildwin.Show(); }

childwindow上的xaml
HTML code
<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
C# code
private void OKButton_Click(object sender, RoutedEventArgs e)        {            this.DialogResult = true;        }


请问当点击childwindow上的OKButton的时候(这时候会返回上一Usercontrol页面),在返回之后,我怎样得到textbox的值?

[解决办法]
为ChildWindow注册一个delegate方法,传递UserControl中的一个方法过去执行
[解决办法]
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即为内容
}
[解决办法]
使用主题-观察者设计模式可以解决这个问题,如果你不熟悉这个设计模式,作为一个程序员希望你学习使用设计模式。如果需要观察者设计模式的具体代码我可以给你整理一下发给你。
这里就简单说明一下解决办法:
一、设计一个主题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的变化值。



[解决办法]
有些错字修改一下
使用主题-观察者设计模式可以解决这个问题,如果你不熟悉这个设计模式,作为一个程序员希望你学习使用设计模式。如果需要观察者设计模式的具体代码我可以给你整理一下发给你。
这里就简单说明一下解决办法:
一、设计一个主题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的变化值。

[解决办法]
1. 定义全局静态变量,单击ChildWindow 的ok按钮时将值保存在全局变量中,然后在FormApplication中直接使用即可.

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

C# code
        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;        }
[解决办法]
在你的Usercontrol 上不是有FormChildWin 的实例吗?
在FormChildWin 委托的close事件中你可以去取你的p_text 内容。
FormChildWin .Closed += new EventHandler(FormChildWin _Closed);


like this:
C# codeif (formChildwin .DialogResult == true)
{
string startdate = formChildwin.p_text;
}

[解决办法]
上面大家给出的解决方法都不错,如果需要更详细的解释可以参考这篇文章,有实例代码下载。

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


http://www.silverlightchina.net/html/tips/2009/1125/261.html
[解决办法]
C# code
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;                }            }        } 

热点排行