Powershell XAML - 使用 XAML 数据模板创建新的 tabitem

Powershell XAML - Use XAML datatemplate to create new tabitems

我有一个小 XAML 表单,我 运行 它来自 powerShell 脚本。它有一个名为“newTab”的控件模板,我用它来创建一个带有两个按钮的选项卡。在 XAML 内工作正常。 但是现在我想在 PowerShell 代码中创建一个新的 tabItem 但缺少实现此目的的正确语法。我正在关注 this 教程,不幸的是在 C# 中。作者是这样玩的:

// create new tab item
TabItem tab = new TabItem();
tab.Header = string.Format("Tab {0}", count);
tab.Name = string.Format("tab{0}", count);
tab.HeaderTemplate = tabDynamic.FindResource("TabHeader") as DataTemplate;

PowerShell 脚本:

[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"
        Title="MainWindow" SizeToContent="WidthAndHeight" MinWidth="250">
    <Window.Resources>
        <ControlTemplate x:Key="newTab" TargetType="TabItem"  >
            <StackPanel Orientation="Horizontal" >
                <Button Content="Test1"/>
                <Button Content="Test2"/>            
            </StackPanel>
        </ControlTemplate>
    </Window.Resources>
    <Grid>
        <Grid>
            <TabControl Name="tabCon" TabStripPlacement="left" ItemsSource="{Binding}">
                <TabItem Template="{StaticResource newTab}"/>  
            </TabControl>
        </Grid>
    </Grid>
</Window>
"@

$reader=(New-Object System.Xml.XmlNodeReader $xaml) 
try{$Form=[Windows.Markup.XamlReader]::Load( $reader )}
catch{Write-Host "Unable to load Windows.Markup.XamlReader"; exit}

$xaml.SelectNodes("//*[@Name]") | ForEach-Object {Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)}

#$myNewTab =  New-Object PSObject -Property "NewTab"    
#$tab = new-Object System.Windows.Controls.TabItem -Style "{StaticResource newTab}"
#$tabCon.AddChild($xaml.tryFindResource("newTab"))

$Form.ShowDialog() | out-null

您可以像在 C# 中一样在 PowerShell 中使用 FindResource

# Create new tab item
$tab = [System.Windows.Controls.TabItem]::new()

# Set template embedded in XAML form
$tab.Template = $Form.FindResource('newTab')