2013年1月3日木曜日

レイアウト(PaddingとMargin)


Padding エレメントの中の要素との間の隙間
Margin エレメントの外側の隙間

定義クラスは?

        Module Name: PresentationFramework.dll

  System.Windows.Controls.Button
    System.Windows.Controls.Primitives.ButtonBase
      System.Windows.Controls.ContentControl
        System.Windows.Controls.Control <--これ(Paddingプロパティ定義)
          System.Windows.FrameworkElement <--これ(Marginプロパティ定義)
            System.Windows.UIElement
              System.Windows.Media.Visual
                System.Windows.DependencyObject
                  System.Windows.Threading.DispatcherObject
                    System.Object
↓↓↓(確認してみる)

Paddingについて

         System.Type : System.Windows.Controls.Control

[System.Windows.Controls.Control]::System.Windows.Thickness get_Padding()
[System.Windows.Controls.Control]::Void set_Padding(System.Windows.Thickness)
[System.Windows.Controls.Control]::System.Windows.Thickness Padding
[System.Windows.Controls.Control]::System.Windows.DependencyProperty PaddingProperty  ←後程...

Marginについて

     System.Type : System.Windows.FrameworkElement

[System.Windows.FrameworkElement]::System.Windows.Thickness get_Margin()
[System.Windows.FrameworkElement]::Void set_Margin(System.Windows.Thickness)
[System.Windows.FrameworkElement]::System.Windows.Thickness Margin
[System.Windows.FrameworkElement]::System.Windows.DependencyProperty MarginProperty  ←後程...

実際に確認してみる


  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="180" Width="250">

<WrapPanel>
<Button Padding="0,5,10,15" Margin="10">ボタン1</Button>
<Button Padding="5,10" Margin="10">ボタン2</Button>
</WrapPanel>

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

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
}

$form = [System.Windows.Markup.XamlReader]::Parse($xaml_win)
# $b = $form.content.children
# $thickness1 = new-object System.Windows.Thickness 10,10,10,10
# $thickness2 = new-object System.Windows.Thickness 10,10,10,10
# 0..($b.count-1) | % { $b[$_].set_Padding($thickness1) }
# 0..($b.count-1) | % { $b[$_].set_Margin($thickness2) }
[void]$Form.ShowDialog()
exit
--------------------------------------------------------------

0 件のコメント:

コメントを投稿