我使用以下部分代码将文本块添加到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");
一切正常但是当我在调试模式下运行时,输出窗口显示以下错误:
System.Windows.ResourceDictionary警告:9:找不到资源;的ResourceKey =' ParameterTextBlockStyle'
" ParameterTextBlockStyle"是在datagrid的资源中定义的,而不是Window资源。奇怪的是,风格定义的资源并不重要,我总是得到这个消息。
可以忽略此错误吗?
答案 0 :(得分: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"));
答案 1 :(得分:0)
SetResourceReference
相当于DynamicResource
,而DataGridTemplateColumn
使用了一些黑客来呈现自己。 (对不起,此时我只是不记得它究竟是什么)。
你可以尝试相当于StaticResource
,这应该更可靠,因为它不必通过走逻辑树来找到样式:
tb.SetValue(FrameworkElement.StylePropertyProperty,
dataGrid.FindResource("ParameterTextBlockStyle"));