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')
我有一个小 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')