我想通過Powershell/WPF應用程序中的某些控件循環。沒有什麼奇特的,只是在mouseEnter事件上設置一些文本。循環瀏覽WPF/Powershell中的控件
,如果我不循環的代碼工作正常:
$reader = New-Object System.Xml.XmlNodeReader $xaml
$d = [Windows.Markup.XamlReader]::Load($reader)
$d.FindName("GridOne").add_mouseEnter({
$d.FindName("HelpText").Content = "One"
})
$d.FindName("GridTwo").add_mouseEnter({
$d.FindName("HelpText").Content = "Two"
})
$d.FindName("GridThree").add_mouseEnter({
$d.FindName("HelpText").Content = "Three"
})
$d.FindName("GridFour").add_mouseEnter({
$d.FindName("HelpText").Content = "Four"
})
但如果我嘗試同樣的事情作爲循環它設置的MouseEnter事件設置文本爲「四」的所有控件,陣列的最後一個元素:
$reader = New-Object System.Xml.XmlNodeReader $xaml
$d = [Windows.Markup.XamlReader]::Load($reader)
$arrControls = ("One","Two","Three","Four")
foreach ($control in $arrControls) {
$d.FindName("Grid$control").add_mouseEnter({
$d.FindName("HelpText").Content = $control
})
}
任何人有任何想法,爲什麼這是,我怎麼能解決它?
感謝,
本
OK - 這是更加古怪......
嘗試使用沿着肯特的建議通過一項解決方案來解決這個問題。我得到了使用$本地控制一樣,所以想我會嘗試使用陣列,以確保每一個條目是不同的:
$i = 0
$localControl = @()
foreach ($control in $arrControls) {
$localControl += $control
write-host "$d.FindName('Grid$control').add_mouseEnter({ $d.FindName('HelpText').Content = $control })"
$d.FindName("Grid$control").add_mouseEnter({
$d.FindName("HelpText").Content = $localControl[$i]
$i = $i + 1
})
}
我知道拿到的行爲是每個我將鼠標懸停在控制時間,文本只是通過增加陣列一步。例如,懸停的第一個控件將輸出「One」,下一個將輸出「Two」,依此類推,直到我的數組耗盡時,它只輸出null。
無論將鼠標懸停在控件上的順序如何,此「一個」,「兩個」,「三個」,「四個」輸出順序都是相同的。
...等一下。已將$ i = $ i + 1放入MouseEnter!
修改爲:
$i = 0
$localControl = @()
foreach ($control in $arrControls) {
$localControl += $control
write-host "$d.FindName('Grid$control').add_mouseEnter({ $d.FindName('HelpText').Content = $control })"
$d.FindName("Grid$control").add_mouseEnter({
$d.FindName("HelpText").Content = $localControl[$i]
})
$i = $i + 1
}
所有輸出設置爲null。
這太棒了 - 讓我難住了!感謝Stej。 – Ben 2010-08-06 11:10:48
歡迎:)只是好奇......你爲什麼不使用PowerBoots/WPK等一些dsl? – stej 2010-08-06 11:38:28