2013年1月3日木曜日

WPFデモ(Hello,World)

  1. PowershellだけでWPF表示(Powershell3.0でも2.0でも稼働)
  2. .Netframeworkは3.0以上が必要
  3. WPFの約束としてPowershellはSTAモードで動く必要あり
  4. 以下コードを
      ①Powershellコンソールにコピペして実行
      ②ISEで実行する時はすでにSTAモードなので適時修正して実行

    注意:ブラウザによってはコピペで行頭に余分な空白が出来てしまうことあり
               C:\temp> □'@   ← ここの行頭に空白あると動かない

#-----------------------------------------------------------------
if ($host.Version.Major -eq 3) {
    powershell.exe
} else {
    if ($host.Runspace.ApartmentState -eq "STA") {return}
    powershell.exe -version 2 -sta
}


$xaml_win = @'
<Window
        xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="170" Width="350">

        <Button Name="mybutton" FontSize="18" FontWeight="Bold">
            二階堂 to WPF with PowerShell
        </Button>

</Window>'@  # <--ブラウザによっては、コピペ時に行頭に空白出来る。空白削除する必要あり

$code = @'
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace MyButton
{
    public class EventTest
    {
        public void subscribe(Button b)
        {
            //b.Click += Button_Click1;
            b.Click += (RoutedEventHandler)Delegate.CreateDelegate(typeof(RoutedEventHandler), this, "Button_Click1");
        }
        public void Button_Click1(object sender, RoutedEventArgs e)
        {
            Console.WriteLine((Button)sender);
            Console.WriteLine(e);
            MessageBox.Show ( "こんにちは、世界");
        }
    }
}
'@  # <--ブラウザによっては、コピペ時に行頭に空白出来る。空白削除する必要あり

if ($host.Version.Major -eq 3) {
    Add-Type $code -ReferencedAssemblies  @("WindowsBase","PresentationCore","PresentationFramework","system.xaml")
} else {
    Add-Type $code -ReferencedAssemblies  @("WindowsBase","PresentationCore","PresentationFramework")
}
$form = [System.Windows.Markup.XamlReader]::Parse($xaml_win)
$mb = New-Object MyButton.EventTest
$mb.subscribe($form.FindName("mybutton"))
[void]$Form.ShowDialog()

exit

#-----------------------------------------------------------------



0 件のコメント:

コメントを投稿