2014-10-04 8 views
0

я использую следующий частичный код, чтобы добавить TextBlock в DataGridTemplateColumn:ресурс не найден, но найден

FrameworkElementFactory tb = new FrameworkElementFactory(typeof(TextBlock)); 
tb.SetValue(TextBlock.IsHitTestVisibleProperty, false); 
tb.SetBinding(TextBlock.DataContextProperty, new Binding("doorparameters[" + pid.ToString() + "]")); 
tb.SetResourceReference(TextBlock.StyleProperty, "ParameterTextBlockStyle"); 

Это все работает нормально, но при запуске в режиме отладки окно вывода показывает ошибку folllowing:

System.Windows.ResourceDictionary Warning: 9 : Resource not found; ResourceKey='ParameterTextBlockStyle'

«ParameterTextBlockStyle» определяется в ресурсах datagrid, а не в ресурсах Windows. Нечетная часть - это неважно, какой ресурс имеет стиль, я всегда получаю это сообщение.

Можно ли проигнорировать эту ошибку?

ответ

0

Попробуйте это,

FrameworkElementFactory tb = new FrameworkElementFactory(typeof(TextBlock)); 
tb.SetValue(TextBlock.IsHitTestVisibleProperty, false); 
tb.SetBinding(TextBlock.DataContextProperty, new Binding("doorparameters[" + pid.ToString() + "]")); 
tb.SetResourceReference(TextBlock.StyleProperty, (Style)dataGrid.FindResource("ParameterTextBlockStyle")); 
+0

Ошибка теперь: «System.Windows .ResourceDictionary Warning: 9: ресурс не найден; ResourceKey = 'System.Windows.Style'; ResourceKey.HashCode = '20' ; ResourceKey.Type = 'System.Windows.Style' ' –

+0

Можете ли вы попробовать: 'style tmpStyle = (Style) dataGrid.FindResource (" ParameterTextBlockStyle ");' только эта строка и отлаживать его. Если tmpStyle имеет значение NULL или генерирует исключение, мы можем попробовать что-то еще. – cKNet

0

SetResourceReference является эквивалентом DynamicResource и IIRC DataGridTemplateColumn использует некоторые хаки, чтобы сделать себя. (Извините, на данный момент я просто не помню, что именно).

Вы можете попробовать эквивалент StaticResource вместо, который должен быть более надежным, поскольку он не должен найти стиль через ходьбе логического дерева:

tb.SetValue(FrameworkElement.StylePropertyProperty, 
      dataGrid.FindResource("ParameterTextBlockStyle")); 
+0

tb - это класс FrameworkElementFactory, который не раскрывает свойство Style напрямую. –

+0

@Paul Извините, конечно, я этого не заметил. Я обновил свой ответ. –

Смежные вопросы