2013年1月3日木曜日

WPFデモ(Binding2)

  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="Markup Extensions" Height="220" Width="175">

<StackPanel>
<Label Name="displayText" Margin="5"/>
<TextBox Name="sourceInfo">10</TextBox>
</StackPanel>

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

$code = @'
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Data;

namespace MyBind
{
public class BindingClass
{
public void bindData(object source, object dest)
{
TextBox s1 = (TextBox)source;
Label   d1 = (Label)dest;

//Bindingの生成
Binding bindingShared = new Binding();

// SourceとPathの設定
bindingShared.Source = s1;

bindingShared.Path = new PropertyPath( "Text" );

//Bindingオブジェクトのセット
d1.SetBinding( Label.ContentProperty, bindingShared );
d1.SetBinding( Label.FontSizeProperty, bindingShared );
}
}
}
'@  # <--ブラウザによっては、コピペ時に行頭に空白出来る。空白削除する必要あり

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)
$textBox = $form.FindName("sourceInfo")
$label = $form.FindName("displayText")
$mb = new-object MyBind.BindingClass
$mb.bindData($textBox, $label);
[void]$Form.ShowDialog()
exit
------------------------------------------------

0 件のコメント:

コメントを投稿