Почему мой TypeConverter не вызывается? - PullRequest
1 голос
/ 23 апреля 2009

Я применил атрибут TypeConverterAttribute к свойству в моем подклассе WPF FrameworkElement. Свойство имеет тип BitmapSource.

Но TypeConverter никогда не создается и не вызывается. Это потому, что TypeConverter, указанный в ImageSource, имеет приоритет?

Я пытаюсь отладить проблему с привязкой данных. В сообщении об ошибке никогда не упоминается мой класс TypeConverter, что говорит о том, что добавление атрибута в свойство не оказало никакого эффекта:

System.Windows.Data Error: 6 : 'TargetDefaultValueConverter' converter failed to convert value '../SmallItemIcons/Gallery.png' (type 'String'); fallback value will be used, if available. BindingExpression:Path=SmallImage.ImageUri; DataItem='ItemSettings' (HashCode=32104365); target element is 'Bitmap' (Name=''); target property is 'Source' (type 'BitmapSource') IOException:'System.IO.IOException: Cannot locate resource 'smallitemicons/gallery.png'.
   at MS.Internal.AppModel.ResourcePart.GetStreamCore(FileMode mode, FileAccess access)
   at System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
   at System.IO.Packaging.PackWebResponse.CachedResponse.GetResponseStream()
   at System.IO.Packaging.PackWebResponse.GetResponseStream()
   at System.IO.Packaging.PackWebResponse.get_ContentType()
   at System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId, Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream& unmanagedMemoryStream, SafeFileHandle& safeFilehandle)
   at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
   at System.Windows.Media.Imaging.BitmapFrame.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy)
   at System.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
   at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)
   at MS.Internal.Data.TargetDefaultValueConverter.Convert(Object o, Type type, Object parameter, CultureInfo culture)
   at System.Windows.Data.BindingExpression.ConvertHelper(IValueConverter converter, Object value, Type targetType, Object parameter, CultureInfo culture)'

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

Я сталкивался с этим раньше и игнорировал это, потому что имел роскошь владеть конвертируемым классом. Однако я только что попробовал это и могу подтвердить, что в соответствии с MSDN это должно работать. Тем не менее, определенно кажется, что он не работает.

Я поднял это на форуме WPF Disciples , где я также предоставил обходной путь.

0 голосов
/ 23 апреля 2009

Вы должны создать объект преобразования в xaml, чтобы использовать его в привязке. Проверьте эту статью

<local:MyConverter key="myconverterorsomething"/>

<TextBlock Text="{Binding Path=TimeOfSale, 
  Converter={StaticResource myconverterorsomething}, 
  ConverterParameter=' \{0:dd-MMM-yyyy hh:mm\}'}" /> 
...