如何从 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'方法从标签中获取值是不区分大小写的
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'方法从标签中获取值是不区分大小写的