動的に変数を作成してコントロールタイプを格納
# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"
# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
param([xml]$Xaml)
# 追番用のハッシュテーブルを初期化
$typeCounters = @{}
# XAML内の全てのコントロール要素を検索
$Xaml.SelectNodes("//*") | ForEach-Object {
$controlType = $_.LocalName
$controlName = $_.Name
# Nameプロパティがある場合はその名前を使用
if ($controlName) {
$varName = "${controlType}_$controlName"
} else {
# Nameプロパティがない場合は追番を使用
if (-not $typeCounters.ContainsKey($controlType)) {
$typeCounters[$controlType] = 1
} else {
$typeCounters[$controlType]++
}
$varName = "${controlType}_" + $typeCounters[$controlType]
}
# 変数を動的に作成(値はシンプルなデモとしてコントロールのタイプ)
New-Variable -Name $varName -Value $controlType -Force
Write-Output "変数作成: $varName = $controlType"
}
}
# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Xaml $Xaml
動的に変数を作成してコントロールオブジェクトを格納(FindNameのみ)
# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"
# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)
# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
param([Windows.Markup.XamlReader]$Window)
# 追番用のハッシュテーブルを初期化
$typeCounters = @{}
# XAML内の全てのコントロール要素を検索
$Window.Content.FindName | ForEach-Object {
$control = $_
$controlType = $_.GetType().Name
$controlName = $_.Name
# Nameプロパティがある場合はその名前を使用
if ($controlName) {
$varName = "${controlType}_$controlName"
} else {
# Nameプロパティがない場合は追番を使用
if (-not $typeCounters.ContainsKey($controlType)) {
$typeCounters[$controlType] = 1
} else {
$typeCounters[$controlType]++
}
$varName = "${controlType}_" + $typeCounters[$controlType]
}
# 変数を動的に作成(値としてコントロールオブジェクトを設定)
New-Variable -Name $varName -Value $control -Force
Write-Output "変数作成: $varName は $($control.GetType().Name) 型のオブジェクトを保持"
}
}
# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window
# ウィンドウの表示
$Window.ShowDialog()
動的に変数を作成して
# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"
# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)
# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
param([Windows.Markup.XamlReader]$Window)
# 追番用のカウンター
$counter = 0
# XAML内の全てのコントロール要素を検索
$Xaml.SelectNodes("//*[@Name]") | ForEach-Object {
$controlName = $_.Name
$controlType = $_.LocalName
# コントロール名を使ってウィンドウ内から対応するオブジェクトを取得
$control = $Window.FindName($controlName)
if ($control -ne $null) {
# 変数名はコントロールタイプと名前を組み合わせて生成
$varName = "${controlType}_$controlName"
# 変数を動的に作成し、値をコントロールオブジェクトに設定
New-Variable -Name $varName -Value $control -Force
Write-Output "変数作成: $varName は $($control.GetType().Name) 型のオブジェクトを保持"
} else {
# Nameプロパティがない場合は、_の後に追番をつけて変数を作成
$varName = "${controlType}_" + ++$counter
# このケースでは、対応するオブジェクトが見つからないため、値は$null
New-Variable -Name $varName -Value $null -Force
Write-Output "変数作成: $varName (対応するコントロールが見つかりません)"
}
}
}
# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window
# ウィンドウの表示
$Window.ShowDialog()
Nameプロパティの有無に関わらずオブジェクトを取得する
# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"
# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)
# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
param([Windows.Markup.XamlReader]$Window)
# 追番用のカウンターを初期化
$counter = 0
# XAML内の全てのノードを対象に検索
$Xaml.SelectNodes("//*") | ForEach-Object {
$nodeName = $_.LocalName
$node = $Window.FindName($_.Name)
if ($node -ne $null) {
# Name属性があるノードの場合
$varName = "${nodeName}_$($_.Name)"
} else {
# Name属性がないノードの場合、追番をつける
$varName = "${nodeName}_" + ++$counter
# 対応するWPFオブジェクトを取得するための別の方法が必要な場合があります
# ここではシンプルのためにXmlNode自体を使用しています
$node = $_
}
# 変数を動的に作成し、値をノードオブジェクトに設定
New-Variable -Name $varName -Value $node -Force
Write-Output "変数作成: $varName は $($node.GetType().Name) 型のオブジェクトを保持"
}
}
# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window
# ウィンドウの表示
$Window.ShowDialog()
WPFとWindowsFormsHostの両方のオブジェクトに対応する
# メインウィンドウのXAMLファイルを読み込む
[xml]$Xaml = Get-Content -Path "$PSScriptRoot\\GUI\\MainWindow.xaml"
# XAMLを読み込んでウィンドウを作成
$reader = New-Object System.Xml.XmlNodeReader $Xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)
# XAMLからコントロールを読み込んで動的に変数を作成する関数
Function Create-DynamicVariablesForControls {
param([Windows.Markup.XamlReader]$Window)
# 追番用のカウンターを初期化
$counter = 0
# XAML内の全てのノードを対象に検索
$Xaml.SelectNodes("//*") | ForEach-Object {
$nodeName = $_.LocalName
$node = $Window.FindName($_.Name)
if ($node -eq $null -and $_.Name -eq '') {
# Name属性がないノードの場合、追番をつける
$nodeName += "_" + ++$counter
}
if ($node -is [System.Windows.Forms.Integration.WindowsFormsHost]) {
# WindowsFormsHost内のコントロールに対応
$childControl = $node.Child
$varName = "WinFormsHost_" + $childControl.Name
$node = $childControl
} elseif ($node -ne $null) {
# 通常のWPFコントロール
$varName = "${nodeName}_$($_.Name)"
} else {
# WindowsFormsHost以外で、Name属性がない場合
$varName = $nodeName
# 対応するWPFオブジェクトが見つからないため、XmlNodeを使用
$node = $_
}
# 変数を動的に作成し、値をノードオブジェクトに設定
New-Variable -Name $varName -Value $node -Force
Write-Output "変数作成: $varName は $($node.GetType().Name) 型のオブジェクトを保持"
}
}
# 関数を呼び出してコントロールに対する動的変数を作成
Create-DynamicVariablesForControls -Window $Window
# ウィンドウの表示
$Window.ShowDialog()