Ошибка при попытке реализовать IValueConverter в PowerShell - скрипт XAML GUI - PullRequest
1 голос
/ 29 июня 2019

Чего мне не хватает? Я пытался реализовать конвертеры для моего скрипта PowerShell на основе XAML, но безуспешно. Я собирал информацию с таких сайтов, как StackOverflow. но не удалось найти одну успешную реализацию конвертера в сценарии графического интерфейса XAML на базе PowerShell.

в коде, который я тестирую, конвертер, и он работает (вы можете увидеть 2 примера для конвертации), так что это означает, что PowerShell сам принял новый тип конвертера, купить этот конвертер невозможно в моем коде xaml.

$src = @'
    using System;
    using System.Windows;
    using System.Windows.Data;
    using System.Globalization;

    namespace MyProject
    {

        public class DemoConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                if (value == null)
                {
                    return "kuku";
                }
                else
                {            
                    return "bobo";
                }
            }
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {   
                return value;
            }
        }
    }
'@

Add-Type -AssemblyName PresentationFramework    
Add-Type -TypeDefinition $src -ReferencedAssemblies PresentationFramework

#Checking that the new type works and convert is done...
$c = new-object MyProject.DemoConverter
$c.Convert("gg", $null, $null, $null)
$c.Convert(55, $null, $null, $null)

#Now declaring and loading the xaml
[xml]$XAML = @'

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cnv="clr-namespace:MyProject" >
    <Window.Resources>
        <cnv:DemoConverter x:Key="TestConverter" />
    </Window.Resources>
    <Grid>     
        <TextBox x:Name="txtTestValue" Text="I'm here to show that xaml loading works!" />
    </Grid>
</Window>
'@

$reader=(New-Object System.Xml.XmlNodeReader $xaml) 

$Window=[Windows.Markup.XamlReader]::Load( $reader )

$Window.ShowDialog() | out-null

Я получаю эту ошибку:

Исключение, вызывающее "Load" с аргументом (ами) "1": "Невозможно создать неизвестный тип '{clr-namespace: MyProject} DemoConverter'."

Если я уберу строку: <cnv:DemoConverter x:Key="TestConverter" /> Это не выдаст вышеуказанную ошибку, и окно покажет (но, конечно, преобразование в xaml не будет доступно), поэтому я предполагаю, что я делаю что-то не так с замедлением пространства имен и / или сборки, что не нравится XAML.

Обратите внимание, что на моем xaml я еще не использую конвертер. Я просто хочу преодолеть вышеуказанную ошибку, прежде чем пытаться использовать конвертер.

Заранее большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...