PowerShell TabControl steuern
Hallo,
ich habe für ein Powershell Skript eine GUI erzeugt, die ich als XAML Datei im Skript lade. Danach initialisiere ich die Steuerelemente und füge Form-Action-Events hinzu. In meiner GUI habe ich ein TabControl-Steuerelement mit 3 Tabs.
Diese habe ich nach dem Muster:
$tabControl = $Form.FindName ('Name_des_Tabcontrol')
initialisiert. Danach folgt dasselbe für die einzelnen Tabs. Mein Ziel ist es nun, dass ich gerne über Powershell herausfinden möchte, welches Tab aktiv ist. Bisher habe ich es mit einem Vergleich $tabControl.SelectedTab.Name = "tabName" versucht. Ich es auch ohne der Property Name und mit der Property Text versucht. Powershell moniert das er die Properties nicht kennt. Kann mir jemand bei dem Problem helfen?
Gruß
derhoeppi
ich habe für ein Powershell Skript eine GUI erzeugt, die ich als XAML Datei im Skript lade. Danach initialisiere ich die Steuerelemente und füge Form-Action-Events hinzu. In meiner GUI habe ich ein TabControl-Steuerelement mit 3 Tabs.
Diese habe ich nach dem Muster:
$tabControl = $Form.FindName ('Name_des_Tabcontrol')
initialisiert. Danach folgt dasselbe für die einzelnen Tabs. Mein Ziel ist es nun, dass ich gerne über Powershell herausfinden möchte, welches Tab aktiv ist. Bisher habe ich es mit einem Vergleich $tabControl.SelectedTab.Name = "tabName" versucht. Ich es auch ohne der Property Name und mit der Property Text versucht. Powershell moniert das er die Properties nicht kennt. Kann mir jemand bei dem Problem helfen?
Gruß
derhoeppi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266936
Url: https://administrator.de/forum/powershell-tabcontrol-steuern-266936.html
Ausgedruckt am: 28.04.2025 um 06:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo derhoeppi,
hier ein Beispiel:
Grüße Uwe
hier ein Beispiel:
[xml]$xaml = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window" Title="Initial Window" WindowStartupLocation = "CenterScreen"
Width = "525" Height = "190" ShowInTaskbar = "True">
<StackPanel>
<TabControl x:Name="myTabControl"
HorizontalAlignment="Left"
Height="100"
Margin="10,10,0,0"
VerticalAlignment="Top"
Width="497">
<TabItem Header="Cat">
<Grid Background="#FFE5E5E5">
<TextBlock HorizontalAlignment="Left"
Margin="10"
TextWrapping="Wrap"
Text="Take pictures of me and put them on the Internet. Meow."
VerticalAlignment="Top"
Width="471"/>
</Grid>
</TabItem>
<TabItem Header="Mouse">
<Grid Background="#FFE5E5E5">
<TextBlock HorizontalAlignment="Left"
Margin="10"
TextWrapping="Wrap"
Text="I want some cheese."
VerticalAlignment="Top"
Width="471"/>
</Grid>
</TabItem>
</TabControl>
<TextBox x:Name="myTextbox" Text="" Width="300" />
</StackPanel>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )
$tab = $window.FindName("myTabControl")
$textbox = $window.FindName("myTextbox")
$tab.Add_SelectionChanged({
$textbox.Text = $tab.SelectedItem.Header
})
$window.ShowDialog() | out-null
Moin,
das kannst du folgendermaßen machen:
Du überprüfst hiermit den Typ des Controls welches das Event ausgelöst hat. Der Grund warum alle Controls innerhalb eines Tabs das Event auslösen ist das Event-Bubbling, das nach oben wandert und auch das SelectionChanged Event des Tab-Controls auslösen. Mit der Überprüfung des Control-Typs kannst du das verhindern.
Grüße Uwe
das kannst du folgendermaßen machen:
$tab.Add_SelectionChanged({
if($_.Source.getType() -eq [System.Windows.Controls.TabControl]){
$textbox.Text = $tab.SelectedItem.Header
}
})
Grüße Uwe