Dynamically Create Controls AddHandler (Event Handler) บน Windows Phone |
Dynamically Create Controls AddHandler (Event Handler) บน Windows Phone บทความและตัวอย่างการสร้าง Controls แบบ Dynamic และการสร้าง Event Handler ให้กับ Controls ที่ถูกสร้างแบบ Dynamic ในขณะที่โปรแกรมกำลังทำงานอยู่ผ่าน Runtime
XAML
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
</StackPanel>
</Grid>
XAML Design ของหน้าขอ Application ซึ่งเราจะสร้าง Controls มาไว้ในส่วนของ ContentPanel
VB.NET
Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
'*** Create TextBlock ***'
Dim textBlock As New TextBlock
textBlock.Name = "txt1"
textBlock.Text = "Please Input Your Name ?"
textBlock.TextAlignment = TextAlignment.Center
ContentPanel.Children.Add(textBlock)
'*** Create TextBox ***'
textBox = New TextBox
textBox.Name = "txt2"
textBox.Height = "72"
textBox.Width = "460"
textBox.TextAlignment = TextAlignment.Center
ContentPanel.Children.Add(textBox)
'*** Create Button ***'
Dim button As New Button
button.Name = "btn1"
button.Content = "Submit"
button.Height = "72"
button.Width = "160"
'button.Margin = New Thickness(44, 63, 0, 0)
AddHandler button.Click, AddressOf Me.buttonClick
ContentPanel.Children.Add(button)
End Sub
Private Sub buttonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
MessageBox.Show("Sawatdee Khun : " + textBox.Text.ToString())
End Sub
C#
private void MainPage_Loaded(object sender, System.Windows.RoutedEventArgs e) {
// *** Create TextBlock ***'
TextBlock textBlock = new TextBlock();
textBlock.Name = "txt1";
textBlock.Text = "Please Input Your Name ?";
textBlock.TextAlignment = TextAlignment.Center;
ContentPanel.Children.Add(textBlock);
// *** Create TextBox ***'
textBox = new TextBox();
textBox.Name = "txt2";
textBox.Height = "72";
textBox.Width = "460";
textBox.TextAlignment = TextAlignment.Center;
ContentPanel.Children.Add(textBox);
// *** Create Button ***'
Button button = new Button();
button.Name = "btn1";
button.Content = "Submit";
button.Height = "72";
button.Width = "160";
button.Click += new System.EventHandler(this.buttonClick);
ContentPanel.Children.Add(button);
}
private void buttonClick(object sender, RoutedEventArgs e) {
MessageBox.Show(("Sawatdee Khun : " + textBox.Text.ToString()));
}
หน้าจอ Design บน Visual Studio ซึ่งตอนนี้จะยังไม่แสดง Controls ใหม่ ที่ได้ถูกสร้างขึ้น
Screenshot
ทดสอบรันผ่าน Emulator ซึ่งจะแสดง Controls ที่ได้ถูกสร้างแบบ Dynamic ผ่าน Runtime
ทดสอบการสร้าง Event ที่ผ่าน Dynamic Runtime
เพิ่มเติม ในกรณีที่เป็น Dynamic Control และต้องการ FindControl สามารถใช้คำสั่งได้ง่าย ๆ เช่น
Dim ID As Integer = 123
Dim text As TextBlock = Me.FindName("txtblock" & ID)
text.Text = "My String"
|