2013年1月3日木曜日

WPFデモ(Binding)

  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
          }


          if ($host.Version.Major -eq 3) {
          add-type -assembly WindowsBase,PresentationCore,PresentationFramework,System.Xml,System.xaml
          } else {
          add-type -assembly WindowsBase,PresentationCore,PresentationFramework,System.Xml
          }

          $Xaml_win = @'
          <Window
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Title="Markup Extensions" Height="220" Width="175">

          <StackPanel>
             <TextBox Name="tbValue" Margin="10"
          Text="{Binding ElementName=sldrSlider, Path=Value, Mode=TwoWay}"/>
             <Slider Name="sldrSlider" TickPlacement="TopLeft" Margin="10"/>
          <Button Name="bnValue">Trigger</Button>
          </StackPanel>

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

          $form = [System.Windows.Markup.XamlReader]::Parse($xaml_win)

          $script = {
          $bindExpression = $form.FindName("tbValue").GetBindingExpression(`
           [System.Windows.Controls.TextBox]::TextProperty)
          $bindExpression.UpdateSource()
          }
          $form.findName("bnValue").add_Click($script)
          [void]$Form.ShowDialog()
          exit
          -----------------------------------------

          0 件のコメント:

          コメントを投稿