ListBox(アイテム選択)クラス
クラスの定義は以下の通り
Module Name: PresentationFramework.dll
System.Windows.Controls.ComboBox
System.Windows.Controls.Primitives.Selector
System.Windows.Controls.ItemsControl <--これから派生されているのはListBoxと同じ
System.Windows.Controls.Control (ItemsとItemsSrouceを保持)
System.Windows.FrameworkElement
System.Windows.UIElement
System.Windows.Media.Visual
System.Windows.DependencyObject
System.Windows.Threading.DispatcherObject
System.Object
どのアイテムが選択されているか?を知るには
「SelectionBoxItem」プロパティにて知る
System.Type : System.Windows.Controls.ComboBox
> [System.Windows.Controls.ComboBox]::System.Object get_SelectionBoxItem()
> [System.Windows.Controls.ComboBox]::System.Object SelectionBoxItem
> [System.Windows.Controls.ComboBox]::System.Windows.DependencyProperty SelectionBoxItemProperty
実際に使ってみる
- PowershellだけでWPF表示(Powershell3.0でも2.0でも稼働)
- .Netframeworkは3.0以上が必要
- WPFの約束としてPowershellはSTAモードで動く必要あり
- 以下コードを
①Powershellコンソールにコピペして実行
②ISEで実行する時はすでにSTAモードなので適時修正して実行
注意:ブラウザによってはコピペで行頭に余分な空白が出来てしまうことあり
C:\temp> □'@ ← ここの行の行頭に空白あると動かない
ComboBox(アイテム選択)の動作確認
#-------------------------------------------------------
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="ComboBox調査" Height="220" Width="250">
<Canvas>
<ComboBox Name="Combo1" SelectedIndex="0" Width="134">
<ComboBoxItem>第1アイテム</ComboBoxItem>
<ComboBoxItem>第2アイテム</ComboBoxItem>
<ComboBoxItem>第3アイテム</ComboBoxItem>
<ComboBoxItem>第4アイテム</ComboBoxItem>
<ComboBoxItem>第5アイテム</ComboBoxItem>
</ComboBox>
<Button Name="Example" Padding="10,3" Canvas.Right="100" Canvas.Bottom="5">
押下
</Button>
</Canvas>
</Window>
'@ # <--ブラウザによっては、コピペ時に行頭に空白出来る。空白削除する必要あり
$code = @'
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace MyButton
{
public class comboClass
{
public ComboBox combo;
public void subscribe(Button b)
{
b.Click += Button_Click;
}
public void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show( combo.SelectionBoxItem.ToString() + " が、選択されました", "通知");
}
}
}
'@ # <--ブラウザによっては、コピペ時に行頭に空白出来る。空白削除する必要あり
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)
$m = new-object MyButton.comboClass
$m.subscribe($form.findname("Example"))
$m.combo = $form.findname("Combo1")
[void]$form.showdialog()
exit
#-------------------------------------------------------
0 件のコメント:
コメントを投稿