DependencyProperties на UIElement
s не поддерживает привязку данных (вы получаете что-то вроде:
"Не могу найти управляющих
FrameworkElement .. ")
. Если вы попытаетесь, вы получите ошибку, потому что WPF не может разрешить DataContext. Насколько я знаю, вы получаете поддержку связывания, если вы наследуете FrameworkElement или Freezable, но в этом случае я не могу просто изменить базовый класс. Есть ли способ получить UIElement для поддержки привязки данных?
Я пытался добавить свойство DataContext в класс UIElement следующим образом:
FrameworkElement.DataContextProperty.AddOwner(typeof(Bitmap), new
FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));
Я также попытался выполнить привязку, указав «ElementName» в выражении привязки, но я все еще не могу разрешить родительский DataContext (я думал, что привязка явно с помощью ElementName просто избавит от необходимости разрешать DataContext).
Это связывание. Данный класс называется «Растровое изображение».
<Utils:Bitmap Source="{Binding Path=Icon}" />
<TextBlock Grid.Row="1" Grid.ColumnSpan="3" MaxWidth="90" Text="{Binding Path=Name}" TextWrapping="Wrap" TextAlignment="Center"/>
Привязка текстового блока работает как положено, первая привязка - нет. Связанная модель представления имеет оба свойства (я ранее связывался с классом Image, и он работал).
Класс растрового изображения можно найти в этом блоге: http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx
При некоторой расширенной диагностике привязки я получаю следующий вывод:
System.Windows.Data Warning: 65 : BindingExpression (hash=14926099): Framework mentor not found
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Icon; DataItem=null; target element is 'Bitmap' (HashCode=117163); target property is 'Source' (type 'BitmapSource')
System.Windows.Data Warning: 63 : BindingExpression (hash=6195855): Resolving source (last chance)
System.Windows.Data Warning: 65 : BindingExpression (hash=6195855): Framework mentor not found
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Icon; DataItem=null; target element is 'Bitmap' (HashCode=55762700); target property is 'Source' (type 'BitmapSource')
System.Windows.Data Warning: 63 : BindingExpression (hash=48657561): Resolving source (last chance)
System.Windows.Data Warning: 65 : BindingExpression (hash=48657561): Framework mentor not found
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Icon; DataItem=null; target element is 'Bitmap' (HashCode=35264868); target property is 'Source' (type 'BitmapSource')