簡體   English   中英

將 XML 輸入 XAML/PowerShell WPF 表單

[英]Feed XML into XAML/PowerShell WPF Form

上周我有一個關於類似主題的問題,這最終是同一個問題,但在那種情況下,由於論壇上有人建議,我設法通過靜態數據上的 PowerShell 數組解決了這個問題。

這一次我不能使用靜態,所以我有點回到我的根本問題。

我在 Visual Studio 中創建了一個 WPF XAML 表單,並將其帶回 Powershell,因為我與客戶的職責是“低代碼”。 有問題的項目是將 xml 文件加載到表單中以填充列表框。 列表框的原因是改變背景顏色的清潔度。

現在在 VS 中,這可以通過數據提供程序找到,但由於我找不到答案的原因,這在帶回 PowerShell 時根本不起作用,因此我尋找了替代方法。

所以我有一個簡單的 XML,如下所示:

<?xml version="1.0"?>
<Configuration>
  <AllowedAutoStart>Application 1</AllowedAutoStart>
  <DenyRemoveAutoStart>Application 2</DenyRemoveAutoStart>
</Configuration>

我想將它輸入到我的 PowerShell/XAML 混合腳本中,然后簡單地將內容綁定到適當的列表框(下面的代碼只是從允許的應用程序開始)

在發帖之前,我嘗試了整個論壇中的一些不同想法,但沒有一個完全成功。 以下是我目前擁有的代碼,它不起作用但也不會產生任何錯誤:-)

感謝任何指導。

# Load Assembly
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName WindowsBase



#Declare XAML Code
[xml]$AppGeneratorWindow = @"
<Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="App Config Generator" Height="350" Width="600" WindowStartupLocation="CenterScreen" Top="5" ResizeMode="NoResize">
    <Window.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="Black" Offset="0"/>
            <GradientStop Color="#FFAA3D3D" Offset="1"/>
        </LinearGradientBrush>
    </Window.Background>
    
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="5*"/>
            <ColumnDefinition Width="115*"/>
            <ColumnDefinition Width="132*"/>
            <ColumnDefinition Width="543*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="381*"/>
            <RowDefinition Height="241*"/>
        </Grid.RowDefinitions>
        <Label Name="AllProgramsLabel" Content="All Programs" HorizontalAlignment="Left" Margin="28.333,20,0,0" VerticalAlignment="Top" Foreground="#FFFEFBFB" FontSize="14" FontWeight="Bold" RenderTransformOrigin="2.696,-3.142" Grid.Column="1" Grid.ColumnSpan="2"/>
        <Button Name="AddButton" Content="Add &gt;&gt;" HorizontalAlignment="Left" Margin="34,83,0,0" VerticalAlignment="Top" Width="166" FontWeight="Bold" FontSize="14" Height="28" BorderBrush="#FF070606" Background="#FF933838" Foreground="#FFFCFAFA" Grid.Column="3" RenderTransformOrigin="0.416,-0.906"/>
        <Label Name="WindowsStartupLabel" Content="Windows Startup" HorizontalAlignment="Left" Margin="236,20,0,0" VerticalAlignment="Top" Foreground="#FFFEFBFB" FontSize="14" FontWeight="Bold" RenderTransformOrigin="2.696,-3.142" Grid.Column="3"/>
        <Button Name="RemoveButton" Content="&lt;&lt; Remove" HorizontalAlignment="Left" Margin="34,169,0,0" VerticalAlignment="Top" Width="166" FontWeight="Bold" FontSize="14" Height="28" BorderBrush="#FF070606" Background="#FF933838" Foreground="#FFFCFAFA" Grid.Column="3" Grid.RowSpan="2" RenderTransformOrigin="0.51,-0.503"/>
        <ListBox Name="AllProgramsListBox" Grid.ColumnSpan="2" Grid.Column="1" HorizontalAlignment="Left" Height="132" Margin="28,65,0,0" Background="#FFAA3D3D" VerticalAlignment="Top" Width="123" Grid.RowSpan="2"/>
        <ListBox Name="StartupListBox" Grid.Column="3" HorizontalAlignment="Left" Height="132" Margin="237,65,0,0" Background="#FFAA3D3D" VerticalAlignment="Top" Width="123" Grid.RowSpan="2"/>


    </Grid>
</Window>
"@




#List Boxes
$AllProgramsListBox = $window.FindName("AllProgramsListBox")

$ConfigurationFile = "$env:ProgramData\WindowsStartupTool\AutoStartConfig.XML"
[xml]$ConfigFile = Get-Content $ConfigurationFile

foreach ($entry in $ConfigFile.Configuration.AllowedAutoStart.add)

    {
        write-host $entry
     
      $AllProgramsListBox.Items.Add($($entry))
    
    }



#Declare & Create the form
$reader=(New-Object System.Xml.XmlNodeReader $AppGeneratorWindow)
$window = [Windows.Markup.XamlReader]::Load($reader)

##########################################
#Launch the User Interface               #
       [void]$window.ShowDialog()        # 
##########################################

這是從 PowerShell 啟動的,這是我必須以某種方式讓它工作的地方。

提前致謝

你很親近。 您真正需要做的就是移動讀取配置文件的部分並執行foreach ($entry..到創建窗口的下方

就像現在的代碼一樣,您正在嘗試使用尚未定義的變量$window

在 XAML 代碼的正下方放置:

#Declare & Create the form
$reader = New-Object System.Xml.XmlNodeReader $AppGeneratorWindow
$window = [Windows.Markup.XamlReader]::Load($reader)

#List Boxes
$AllProgramsListBox = $window.FindName("AllProgramsListBox")

$ConfigurationFile = "$env:ProgramData\WindowsStartupTool\AutoStartConfig.XML"
[xml]$ConfigFile = Get-Content $ConfigurationFile -Raw

foreach ($entry in $ConfigFile.Configuration.AllowedAutoStart) {
      Write-Host $entry
      $AllProgramsListBox.Items.Add($entry)
}

##########################################
#Launch the User Interface               #
       [void]$window.ShowDialog()        # 
##########################################

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM