Member 12674826 Ответов: 1

В WPF элемент управления UserControl в PowerShell


привет,
Требуется отобразить пользовательский элемент управления в элементе вкладки. Ниже приведен код, который я пытаюсь использовать.

Add-Type -AssemblyName PresentationFramework
[xml]$MainXAML = @"
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="42*" />
            <RowDefinition Height="269*" />
        </Grid.RowDefinitions>
            <Button Name="Button1" Content="ClickMe" Width="61" Height="20" Margin="12,12,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"></Button>
        <TabControl Name="tabChildContainer" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Grid.Row="1"></TabControl>

    </Grid>
</Window>
"@
[xml]$UserControlXAML = @"
<UserControl 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

             Height="292" Width="489">
    <Grid>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="150,86,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
    </Grid>
</UserControl>

"@

$MainReader = New-Object System.Xml.XmlNodeReader $MainXAML
$Window_Main= [Windows.Markup.XamlReader]::Load($MainReader)

$UC_Reader = New-Object System.Xml.XmlNodeReader $UserControlXAML
$Window_UC= [Windows.Markup.XamlReader]::Load($UC_Reader)


$MainXAML.SelectNodes("//*[@Name]") | %{ Set-Variable -Name ("WPF_Main_"+$_.Name) -Value $Window_Main.FindName($_.Name) -Scope "Script" }
$UserControlXAML.SelectNodes("//*[@Name]") | %{ Set-Variable -Name ("WPF_UC_"+$_.Name) -Value $Window_UC.FindName($_.Name) -Scope "Script" }
$script:WPF_Main_button1.Add_Click(
{
    Write-Host -ForegroundColor Green "I am in the click event."
    $TabItem1 = New-Object System.Windows.Controls.TabItem
    $TabItem1.Header = "Eureka"
    $TabItem1.AddChild($WPF_UC_button1)
    $WPF_Main_tabChildContainer.Items.Add($TabItem1)
})
$Window_Main.ShowDialog() 

Ниже приведена ошибка. Может ли кто-нибудь помочь мне исправить это? Заранее спасибо.
Exception calling "ShowDialog" with "0" argument(s): "Must disconnect specified child from current parent Visual before attaching to new parent Visual."
At line:50 char:1
+ $Window_Main.ShowDialog()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException


Что я уже пробовал:

привет,
Я пытаюсь использовать пользовательский элемент управления WPF в PowerShell. Все работает нормально, но когда я выбираю пункт вкладки, то получаю ошибку фокусировки.

1 Ответов

Рейтинг:
2

Member 14851617

менять

$TabItem1.AddChild($WPF_UC_button1)

к
$TabItem1.AddChild($Window_UC)


и это сработало для меня


Dave Kreskowiak

Я серьезно сомневаюсь, что ОП все еще ищет ответ 4 года спустя.

Member 14851617

Это очень справедливо, но если кто-то еще столкнется с этим постом, то теперь есть ответ.

Dave Kreskowiak

Создание пользовательских элементов управления в Powershell-это очень узкий рынок.