我想念的是什么?我试图将转换器实现为基于XAML的PowerShell脚本,但是没有运气。我已经从StackOverflow之类的网站上获取了一些信息。但在基于Powershell XAML的GUI脚本中找不到转换器的成功实现。
在我正在测试转换器的代码中,它可以正常工作(您可以看到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
我一直收到此错误:
使用“ 1”自变量调用“ Load”的异常:“无法创建未知类型'{clr-namespace:MyProject} DemoConverter'。”
如果我删除该行:<cnv:DemoConverter x:Key="TestConverter" />
它不会给出上述错误,并且会显示该窗口(但是,当然,xaml中的转换将不可用),所以我想我在XAML不喜欢的名称空间和/或程序集减速方面做错了。 >
请注意,在我的xaml上,我尚未使用转换器。我只想在尝试使用转换器之前克服上述错误。
非常感谢!
我想念的是什么?我试图将转换器实现为基于XAML的PowerShell脚本,但是没有运气。我已经从StackOverflow之类的网站上获取了一些信息。但找不到一个...
我注册了Stackoverflow只是为了参加这个问题。