在'System.Windows.StaticResourceExtension'上提供值
问题描述:
经过很长时间的winform之后,我再次做了一些WPF,并且遇到了使用转换器的问题。在'System.Windows.StaticResourceExtension'上提供值
我有一个用户控件,它里面我有一个网格DevExpress的:
<UserControl x:Class="X.Y.Z.Views.LogMessagesView"
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:local="clr-namespace:X.Y.Z.Views"
xmlns:mvvm="http://prismlibrary.com/"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:devExpress="clr-namespace:X.Wpf.Converters.DevExpress;assembly=X.Wpf"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" mvvm:ViewModelLocator.AutoWireViewModel="True">
<UserControl.Resources>
<devExpress:CollectionToCriteriaOperatorConverter x:Key="CollectionToCriteriaOperatorConverter"/>
</UserControl.Resources>
<dxg:GridControl SelectionMode="Row" ItemsSource="{Binding EventsList}" FilterCriteria="{Binding VisibleLevels, Converter={StaticResource CollectionToCriteriaOperatorConverter}, ConverterParameter='Level'}">
<dxg:GridControl.SortInfo>
<dxg:GridSortInfo FieldName="TimeStamp" SortOrder="Descending" />
</dxg:GridControl.SortInfo>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="TimeStamp" Header="Local Computer Time">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="G"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Level" Header="Level" >
<dxg:GridColumn.DisplayTemplate>
<ControlTemplate>
<StackPanel Orientation="Horizontal" DataContext="{Binding EditValue, RelativeSource={RelativeSource TemplatedParent}}">
<!-- Convert severity to image -->
<TextBlock Text="{Binding Name}" />
</StackPanel>
</ControlTemplate>
</dxg:GridColumn.DisplayTemplate>
</dxg:GridColumn>
<dxg:GridColumn FieldName="RenderedMessage" Header="Message"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView ShowFixedTotalSummary="True" AutoWidth="True" Name="view" AllowSorting="False" ShowIndicator="False" ShowGroupPanel="False" ShowAutoFilterRow="False" AllowColumnFiltering="False" AllowEditing="False" AllowFilterEditor="False" AllowGrouping="False" AllowMasterDetail="False">
<dxg:TableView.ColumnMenuCustomizations>
<dxb:RemoveBarItemAndLinkAction ItemName="BestFitColumns" />
</dxg:TableView.ColumnMenuCustomizations>
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
</UserControl>
我宣布我Converter
的资源,我用它在我的约束力。一切编译,但是我得到了运行时异常:
System.Windows.Markup.XamlParseException occurred
HResult=-2146233087
LineNumber=38
LinePosition=130
Message='Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' Line number '17' and line position '78'.
Source=PresentationFramework
StackTrace:
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at X.Y.Z.Views.LogMessagesView.InitializeComponent() in E:\Dev\WS1\Branches\ReworkedServer\Solution\AAAAAA\Views\LogMessagesView.xaml:line 1
InnerException:
HResult=-2147467263
Message=The method or operation is not implemented.
Source=PresentationFramework
StackTrace:
at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlType(BamlType bamlType, Int16 typeId)
at System.Windows.Baml2006.Baml2006SchemaContext.GetXamlType(Int16 typeId)
at System.Windows.Baml2006.Baml2006Reader.Process_ElementStart()
at System.Windows.Baml2006.Baml2006Reader.ReadObject(KeyRecord record)
at System.Windows.ResourceDictionary.CreateObject(KeyRecord key)
at System.Windows.ResourceDictionary.OnGettingValue(Object key, Object& value, Boolean& canCache)
at System.Windows.ResourceDictionary.OnGettingValuePrivate(Object key, Object& value, Boolean& canCache)
at System.Windows.ResourceDictionary.GetValueWithoutLock(Object key, Boolean& canCache)
at System.Windows.ResourceDictionary.GetValue(Object key, Boolean& canCache)
at System.Windows.StaticResourceExtension.FindResourceInEnviroment(IServiceProvider serviceProvider, Boolean allowDeferredReference, Boolean mustReturnDeferredResourceReference)
at System.Windows.StaticResourceExtension.TryProvideValueInternal(IServiceProvider serviceProvider, Boolean allowDeferredReference, Boolean mustReturnDeferredResourceReference)
at System.Windows.StaticResourceExtension.ProvideValueInternal(IServiceProvider serviceProvider, Boolean allowDeferredReference)
at System.Windows.StaticResourceExtension.ProvideValue(IServiceProvider serviceProvider)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
InnerException:
转换器,如果它的事项:
public class CollectionToCriteriaOperatorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
String columnName = parameter as String;
if (string.IsNullOrEmpty(columnName))
{
throw new ArgumentNullException(nameof(columnName), "You have to provide a valid column name");
}
IEnumerable collection = value as IEnumerable;
if (collection == null)
{
return null;
}
return new InOperator(new OperandProperty(columnName), collection.OfType<object>().Select(x => new OperandValue(x)));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我发现了一些其他情况下,但他们说,转换器应在其使用前进行初始化(这似乎是这样的,对吧?)
我也使用棱镜,我不知道它是否会带来一些其他问题(此用户控件放入视图)。
我错过了什么?
答
我刚刚发现问题所在。我遇到了Visual Studio崩溃,Visual Studio将目标重置为“混合平台”。我不知道为什么它不起作用,但我们的一些项目没有这个平台的目标。
我将它重新设置为32位,现在一切正常。
你能编辑完整的异常吗?它可能会提供线索。 – Haukinger
请参阅[“应该在其标题中包含”标签“?”](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其*识是“不,他们不应该”! –
@ J4N你的转换器是好的,应该工作和过滤罚款从我看到的,一个原因可能是它未能找到资源,尝试在同一个项目中声明转换器只是为了排除这一点,而不是从类库。 –