使用powershell和WPF如何在列表框中显示选定的目录路径

时间:2017-03-03 18:26:33

标签: wpf xaml powershell

我找到了这个Powershell功能代码块来选择一个文件夹。然后,我添加了两个变量(sourcePath,source)来引用XAML文件。当用户按下“确定”时,我需要将选定的文件夹路径显示在不同的列表框“$ sourcePath”中。我尝试在“Return $ objForm.SelectedPath”之后将列表框调用为“$ sourcePath.Write($ objForm.SelectedPath)”。我做错了什么,但不知道如何解决它。谢谢。

$XAML = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Choose Folder" Height="350" Width="500">
<StackPanel>      
<Button x:Name="choose" Content="choose" HorizontalAlignment="Left"  
Margin="42,108,0,0" VerticalAlignment="Top" Width="121" />
<ListBox x:Name="sourcePath" HorizontalAlignment="left" Height="45" 
Margin="42,120,0,0" VerticalAlignment="Top" Width="400"/> 
</StackPanel>
</Window>
'@

$sourcePath=$win.Find("sourcePath")
$source=$win.Find("source")
$source.Add_click({Select-FolderDialog})
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |        
Out-Null
Function Select-FolderDialog 
{param([string]$Description="Select Folder",[string]$RootFolder="Desktop")   
 $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
 $objForm.Rootfolder = $RootFolder
 $objForm.Description = $Description
 $Show = $objForm.ShowDialog()
    If ($Show -eq "OK")
    {
     Return $objForm.SelectedPath
     $sourcePath.Write($objForm.SelectedPath)
    }
    Else
    {
      Write-Error "Operation cancelled by user."
    }
    $b = Select-FolderDialog
}

2 个答案:

答案 0 :(得分:0)

删除"noImplicitAny": true 。它将值返回到控制台并结束该函数,这意味着永远不会执行Return $objForm.SelectedPath

  

Return关键字退出函数,脚本或脚本块

来源:about_Return

答案 1 :(得分:0)

只有一些小错误,例如使用“write”将某些东西放入ListBox。

当然,就像Frode F.指出的那样,省略了返回 - 除了在函数结束之前离开函数之外,函数内部不需要返回语句。

这是一个稍微修改过的脚本代码版本,它显示一个带有列表框和按钮的窗口,并将选定的路径放入该列表框中。

$XAML = @'

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Folder-Browser"
  Height="500"
  Width="600"
>
 <StackPanel>
  <ListBox x:Name="sourcePath" Height="300" Width="320" Margin="10"/>
  <Button x:Name="choose" Content="Choose Folder" Width="120" Height="40" Margin="10"/>
 </StackPanel>
</Window>
'@

$Win = [Windows.Markup.XamlReader]::Parse($XAML)
$sourcePath = $Win.FindName("sourcePath")
$button = $Win.FindName("choose")
$button.Add_Click({Select-FolderDialog})

Add-Type -Assembly System.Windows.forms

function Select-FolderDialog 
{
  param([String]$Description="Select Folder", 
        [String]$RootFolder="Desktop")   

  $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
  $objForm.Rootfolder = $RootFolder
  $objForm.Description = $Description
  $Show = $objForm.ShowDialog()
  if ($Show -eq "OK")
  {
     $SourcePath.Items.Add($objForm.SelectedPath)
  }
}

$Win.ShowDialog()

如果脚本使用PowerShell 4.0及更高版本运行,我建议使用parse方法立即返回Window对象:

$Win = [Windows.Markup.XamlReader]::Parse($Xaml)