PowerShell WPF动态呈现关闭选项卡按钮

时间:2018-04-06 16:36:02

标签: wpf powershell xaml tabcontrol

我正在尝试为自己创建一个RDP管理器。由于RDP管理器在使用期间动态添加和关闭选项卡,因此我需要在WPF中正常工作。

如果我在按钮上添加一个函数(方法),在tabitem模板中,它在visual studio中工作得很好。当我将XAML复制到我的PowerShell脚本时,我无法在按下该按钮时运行某个功能。由于按钮位于模板内部,因此我无法访问PowerShell脚本中的按钮控件来创建add_click({ #somecode })

这是我的WPF tabcontrol:

 <TabControl Name="MainTabControlRDPPages" ItemsSource="{Binding Tabs}">
  <TabControl.ItemContainerStyle>
    <Style TargetType="TabItem">
      <Setter Property="HeaderTemplate">
        <Setter.Value>
          <DataTemplate DataType="local:TabViewModel">
            <Grid>
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
              </Grid.ColumnDefinitions>
              <TextBlock Grid.Column="0" Text="{Binding}"/>
              <Button Grid.Column="1" x:Name="button_close" Click="RunPowershellTest">
                <Button.Template>
                  <ControlTemplate TargetType="Button">
                    <Path Data="M0,0 L8,8 M8,0 L0,8" StrokeThickness="3" VerticalAlignment="Center" Margin="5,4,0,2">
                      <Path.Style>
                        <Style TargetType="{x:Type Path}">
                          <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="False">
                            <Setter Property="Stroke" Value="LightGray" />
                          </Trigger>
                            <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Stroke" Value="Black" />
                          </Trigger>
                          </Style.Triggers>
                        </Style>
                      </Path.Style>
                    </Path>
                  </ControlTemplate>
                </Button.Template>
              </Button>
             </Grid>
            </DataTemplate>
          </Setter.Value>
        </Setter>
      </Style>
  </TabControl.ItemContainerStyle>

  <TabItem Header="No Session" />
</TabControl>

我在PowerShell中使用此代码来读取所有控件并为其命名。

$reader =(New-Object System.Xml.XmlNodeReader $xaml)
$Window = [Windows.Markup.XamlReader]::Load( $reader )
$xaml.SelectNodes("//*[@Name]") | ForEach-Object { Set-Variable -Name 
($_.Name) -Value $window.FindName($_.Name) -Scope Script }

如何确保为button_close按钮创建点击事件?如果有一个选项可以在Powershell执行期间手动添加WPF格式的tabitem而不指定模板我也很好。

更新

该按钮只需关闭标签页。如果可以在XAML中完成,我就可以了。

1 个答案:

答案 0 :(得分:0)

感谢PowerShell facebook小组内部人员的帮助,我有以下解决方案。这将为tabcontrol创建一个处理程序,它会检查标题内是否按下了按钮。如果是,请继续关闭标签页。

[System.Windows.RoutedEventHandler]$EventontabControl = {
    $script:headerName = $_.OriginalSource
    Write-Host $headername

    $script:MainTabControlRDPPageToClose = $_.Source
    $MainTabControlRDPPages.Items.Remove($MainTabControlRDPPageToClose)
}
$MainTabControlRDPPages.AddHandler([System.Windows.Controls.Button]::ClickEvent, $EventontabControl)