[Silverlight] 取得ChildWindows 的值 (1)
2010/10/26
因為常常被問..
所以來筆記一下…
怎麼從ChildWindow 取得使用者選擇的值…
首先..我在MainPage 加入一個按鈕..跟一個Label..
讓Label 顯示ChildWindows 顯示的結果 畫面如下 :
所以案例是 點擊 btnGet1 的時候跳出ChildWindows 然後選擇值..關閉後把答案show 在lblResult1
然後我們做一個ChildWindows ..畫面如下..
XAML Code:
<controls:ChildWindow x:Class="GetChildWindowsValue.ChildWindow1" 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" Width="200" Height="250" Title="ChildWindow1"> <Grid x:Name="LayoutRoot" Margin="2" Loaded="LayoutRoot_Loaded"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" /> <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" /> <ListBox Height="137" HorizontalAlignment="Left" Margin="32,23,0,0" Name="lstMain" VerticalAlignment="Top" Width="120" /> </Grid> </controls:ChildWindow>
C#:
using System.Windows; using System.Windows.Controls; namespace GetChildWindowsValue { public partial class ChildWindow1 : ChildWindow { public ChildWindow1() { InitializeComponent(); } /// <summary> /// 自訂的Property /// </summary> public string Result { get; set; } private void OKButton_Click(object sender, RoutedEventArgs e) { //如果使用者沒有選則,把此行為視為false if(lstMain.SelectedItem!=null) { Result = this.lstMain.SelectedValue.ToString(); this.DialogResult = true; } else { this.DialogResult = false; } } private void CancelButton_Click(object sender, RoutedEventArgs e) { this.DialogResult = false; } //加入三個測試項目 private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) { this.lstMain.Items.Add("當麻許"); this.lstMain.Items.Add("六月羊"); this.lstMain.Items.Add("Dracula"); } } }
其中比較特別的就是我開了一個叫做 Result 的Property 來裝選取的值…
回到MainPage..
在btnGet1 的Click 事件為:
private void btnGet1_Click(object sender, RoutedEventArgs e) { ChildWindow1 childWindow1 = new ChildWindow1(); //再關閉時加入事件取值 childWindow1.Closed += new EventHandler(childWindow1_Closed); childWindow1.Show(); }
其中比較特別的是..我在childWindow1 的時候加入一個Close 的事件..
void childWindow1_Closed(object sender, EventArgs e) { //如果childwindow 是選擇 ok 再取答案 if ((sender as ChildWindow1).DialogResult == true) { //取得自訂的Result Property this.lblResult1.Content = (sender as ChildWindow1).Result; } else { this.lblResult1.Content = "您尚未選取"; } }
在 Closed 的時候取出 自訂的 Result的值…
當然在 ChildWindow 我有去設定如果使用者沒有選擇…
也是視為他按了Cancel…
這樣就可以取到使用值 在ChildWindow 選的值..
當然這不是唯一做法..
如果有更好做法,也請各位先進指教..
只是很常有朋友問這問題就寫一篇…
讚一下:
案例預覽:
下載 :
標籤:
Silverlight
|
This entry was posted on 下午2:41
and is filed under
Silverlight
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言