Я написал следующий сценарий Test.ps1
PowerShell для отображения графического интерфейса WPF:доступ UserControl элементов/свойство из главного окна в сценарии WPF XAML PowerShell
function LoadXamlFile($path)
{
[System.Xml.XmlDocument]$xml = Get-Content -Path $path
$xmlReader = New-Object -TypeName System.Xml.XmlNodeReader -ArgumentList $xml
$xaml = [System.Windows.Markup.XamlReader]::Load($xmlReader)
return $xaml
}
# Main Window
$MainWindow = LoadXamlFile 'MainWindow.xaml'
# Page 1
$Page1 = LoadXamlFile 'Page1.xaml'
$MainWindow.Content = $Page1
$TextBox1 = $MainWindow.FindName('TextBox1')
# The following line fails because $TextBox1 is null
$TextBox1.Text = 'test'
$MainWindow.ShowDialog()
Этого сценарий требует два следующих XAML файлов:
MainWindow.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="MainWindow"
Title="WPF Test" Height="200" Width="400">
</Window>
Page1.xaml
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Page1">
<Grid>
<TextBox x:Name="TextBox1" HorizontalAlignment="Center" Height="23" Margin="0,-40,0,0" TextWrapping="Wrap" VerticalAlignment="Center" Width="120"/>
<Button x:Name="Button1" Content="Next" HorizontalAlignment="Center" Margin="0,40,0,0" VerticalAlignment="Center" Width="76"/>
</Grid>
</UserControl>
Проблема, как указано в моем коде PowerShell, заключается в том, что я не могу получить доступ к элементам/свойствам UserControl после добавления UserControl в главное окно. Я знаю, что могу получить к нему доступ с $Page1.FindName('TextBox1')
, но есть ли способ сделать это от объекта $MainWindow
?
Вы хотите сказать, что вам нужно получить доступ к элементам из объекта $ Page1? Не объект $ MainWindow? –
Я имею в виду, что после добавления объекта '$ Page1' в' $ MainWindow.Content' я должен иметь доступ к TextBox1 из '$ MainWindow', что не соответствует моему текущему коду. – Christophe