如何从 Powershell/XAML 中的 XML 文件更改按钮的内容?

How to change the Content of a Button from an XML file in Powershell/XAML?

Powershell 的新手和 XAML。

我正在尝试设置按钮的内容以读取特定的 XML 文件 (C:\Folder\Number.xml) 只是为了有机会直接从 XML 更改我的应用程序按钮的内容,而不是在 Powershell 中更改代码,并显示一些变量信息。

我正在获取 xml 文件的内容:

$xmlFilePathLOCAL = 'C:\Folder\Number.xml'
$NumberXml = [xml](Get-Content $xmlFilePathLOCAL)

“Cell1”按钮应该从 XML 文件中的 Number 标签获取内容:

XML 此处示例:

<?xml version="1.0" encoding="utf-16"?>
<data>
  <Number>1</Number>
  <Vocals>e</Vocals>
  <Days>Monday</Days>
  <Fruits>Apples</Fruits>
</data>

我尝试如下设置绑定和多项内容。它没有给我任何错误,但同时 Button 是空的:

<Button Name="Cell1" Grid.Row="0" Grid.Column="0"  Opacity="1"  Background="#808080"  FontFamily="Impact" FontSize="30" Foreground="White">
    <TextBlock Text="{Binding ElementName=NumberXml, Path=data/Number}" FontSize="60" FontFamily="Impact"/>
</Button>

我做错了什么? 非常感谢大家的帮助!

这是部分代码:

$xmlFilePathLOCAL = 'C:\Folder\Number.xml'
$NumberXml = [xml](Get-Content $xmlFilePathLOCAL)

#Show-Process "overlay"
$inputXML = @"
<Window 
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
 x:Name="Window" 
  WindowStyle = "None" WindowState="Maximized"
 ResizeMode = "NoResize" Title = "overlay" AllowsTransparency = "True" Background = "Transparent" Opacity = "1" Topmost = "True" >
  <Grid x:Name = "Grid" Background = "Transparent" ShowGridLines="False" >
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
  <RowDefinition Height="*" />
  </Grid.RowDefinitions>  
<Button Name="Cell1" Grid.Row="0" Grid.Column="0"  Opacity="1"  Background="#808080"  FontFamily="Impact" FontSize="30" Foreground="White" Content="TEXT TO GET FROM XML FILE"/>
<Button Name="EXIT" Grid.Row="0" Grid.Column="1"  Opacity="1" Background="RED" FontFamily="Impact" FontSize="30" Foreground="White" Content="EXIT"/>
</Grid>
</Window>
"@
$inputXML = $inputXML -replace 'mc:Ignorable="d"','' -replace "x:N",'N' -replace '^<Win.*', '<Window'
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = $inputXML
#Read XAML

如果您的 XML 文件中的唯一值是 <Number> 标记,您可以使用我评论过的行来获取变量中的值。

$TheNumberFromXml = ([xml](Get-Content -Path 'D:\Test\number.xml' -Raw)).data.number

但是,如果文件有更多您想要获取其值的标签,最简单的方法可能是只读取一次文件并让 PowerShell 将其解析为一个好的对象。然后在适当的时候从中获取你需要的任何东西。

假设(如您的评论所述)文件如下所示:

<?xml version="1.0" encoding="utf-16"?>
<data>
  <Number>1</Number>
  <Vocals>e</Vocals>
  <Days>Monday</Days>
  <Fruits>Apples</Fruits>
</data>

然后在你的脚本中读一次

[xml]$TheXmlValues = Get-Content -Path 'D:\Test\number.xml' -Raw

然后通过

获取任何特定标签所需的内容
$number = $TheXmlValues.data.number
$vocals = $TheXmlValues.data.vocals
$days   = $TheXmlValues.data.days
$fruits = $TheXmlValues.data.fruits

使用'dotted'方法从标签中获取值是不区分大小写的