2016-03-07 61 views
0

經過很長時間的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(); 
    } 
} 

我發現了一些其他情況下,但他們說,轉換器應在其使用前進行初始化(這似乎是這樣的,對吧?)

我也使用棱鏡,我不知道它是否會帶來一些其他問題(此用戶控件放入視圖)。

我錯過了什麼?

+0

你能編輯完整的異常嗎?它可能會提供線索。 – Haukinger

+0

請參閱[「應該在其標題中包含」標籤「?」](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中共識是「不,他們不應該」! –

+0

@ J4N你的轉換器是好的,應該工作和過濾罰款從我看到的,一個原因可能是它未能找到資源,嘗試在同一個項目中聲明轉換器只是爲了排除這一點,而不是從類庫。 –

回答

0

我剛剛發現問題所在。我遇到了Visual Studio崩潰,Visual Studio將目標重置爲「混合平臺」。我不知道爲什麼它不起作用,但我們的一些項目沒有這個平臺的目標。

我將它重新設置爲32位,現在一切正常。