从WPF TextBox保存文本时,Powershell添加了领先的空间

时间:2018-08-26 22:25:55

标签: wpf powershell

每次将WPF文本框中的文本保存到文本文件时,PowerShell都会在每个行的第二行开始添加一个前导空格。下面的代码演示了此行为。从具有几行的文本文件开始,单击保存,关闭,然后重新打开以查看此行为。

Test1
Test2
Test3

更改为

Test1
  Test2
  Test3

每当文本框中的文本保存到文本文件时,是否有任何方法可以避免这种前导空格?

[xml]$xaml=@"
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        Title="MainWindow" Height="450" Width="500">
    <Grid>
        <TextBox x:Name="Userinput" Height="140" TextWrapping="Wrap" VerticalAlignment="Top" AcceptsReturn="True" AcceptsTab="True" Padding="4" VerticalScrollBarVisibility="Auto" />
        <Button x:Name="Save" Content="Save" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" IsDefault="True" Height="22" Margin="170,150,0,0" />        
    </Grid>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load($reader)
#Turn XAML into PowerShell objects
$xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'x:Name')]]") | ForEach-Object{
Set-Variable -Name ($_.Name) -Value $Window.FindName($_.Name)
}

#Load text from text file.
$Userinput.Text = Get-Content -Path "C:\temp\userinput.txt" -Delimiter "`r`n"  

#Save text
$save.Add_Click({$Userinput.Text | Out-File -NoNewline "C:\temp\userinput.txt"})

#Display Form
$Window.ShowDialog() | Out-Null

1 个答案:

答案 0 :(得分:1)

set of phone numbers期望一个单个字符串 ,即使该字符串包含多行。因此,使用$Userinput.Text (PSv3 +)以单个字符串的形式读取文件的内容:

Get-Content -Raw

关于您尝试过的操作:没有$Userinput.Text = Get-Content -Raw -LiteralPath C:\temp\userinput.txt 的{​​{1}}返回字符串的数组,默认情况下,每个字符串代表单个输入行,其中以下任意换行样式均以任意组合识别为行分隔符:Get-Content(CRLF),-Raw(LF),"`r`n"(CR)。

PowerShell将数组强制转换为字符串时,会将其各个元素的字符串表示形式连接在一起,并在元素之间使用单个空格,这将说明您看到的多余空格。

您也看到换行符的原因是"`n"在Windows PowerShell中的工作方式古怪(此问题已在PowerShell Core 中得到解决) :在每个元素中包括了指定的定界符(分隔符),因此"`r"不仅不需要返回行数组(由于-Delimiter的默认行为) ),实际上它在返回的每一行的末尾包含-Delimiter "`r`n"