Чего мне не хватает? Я пытался реализовать конвертеры для моего скрипта 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 я еще не использую конвертер. Я просто хочу преодолеть вышеуказанную ошибку, прежде чем пытаться использовать конвертер.
Заранее большое спасибо!