我一直在搜索Google和StackOverflow的高低,我似乎无法找到有效的答案;我在我维护的类库中有一个IValueConverter,我想把它传递给一个(第三方)组件,该组件用XAML文件创建文件打印。 新创建的ClassLibrary(虽然共享命名空间的开头)不是同一项目/解决方案的一部分(并且不能)。
我的问题 1)XAML可以动态加载“外部”类库吗? 2)我是这样,我如何引用这个类库?
到目前为止我做过和尝试过的事情; 我已经在我的类库中添加了一个名为UtcTimeConverter的IValueConverter类,它具有相当简单的转换日期时间到Utc时间函数。
我已正常编译它并编译为资源。
我尝试使用或不使用assembly =
XAML:
<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"
xmlns:components="clr-namespace:XX.YY.Printing;assembly=XX.YY.Printing"
xmlns:dd="clr-namespace:XX.YY.Printing.DesignData;assembly=XX.YY.Printing"
xmlns:mcl="clr-namespace:XX.YY.MyClassLib;assembly=XX.YY.MyClassLib"
d:DataContext="{d:DesignInstance dd:SampleXXViewModel, IsDesignTimeCreatable=True}"
mc:Ignorable="d"
Height="50.86cm" Width="4.9cm"
FontFamily="Arial"
FontWeight="Bold"
FontSize="0.3cm">
<UserControl.Resources>
<mcl:UtcTimeConverter x:Key="utcTimeConverter" />
SNIP
<TextBlock Grid.Column="1" Grid.Row="6" Text="{Binding dateOfIssue, Converter={StaticResource utcTimeConverter}, StringFormat=\{0:ddMMMyy HH:mm\}}" FontSize="12" />
我的课程:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Data;
namespace XX.YY.MyClassLib
{
public class UtcTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is IConvertible)) return value;
return System.Convert.ToDateTime(value).ToUniversalTime();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
其他XX.YY的东西是可用的,我可以使用这些,但不知怎的,我的新课程从未被调用过;这是错误消息:
无法创建未知类型 '{} XX.YY.MyClassLib UtcTimeConverter'“。行号'17'和 行位置'10':at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory,Boolean skipJournaledProperties,Object rootObject,XamlObjectWriterSettings 设置,Uri baseUri)at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, Boolean skipJournaledProperties,Uri baseUri)at System.Windows.Markup.XamlReader.Load(XamlReader xamlReader, ParserContext parserContext)at System.Windows.Markup.XamlReader.Load(XmlReader reader,ParserContext parserContext,XamlParseMode parseMode)at System.Windows.Markup.XamlReader.Load(Stream stream,ParserContext parserContext)在System.Windows.Markup.XamlReader.Load(Stream 流)