在WPF用户控件声明中,我有以下样式定义:
<UserControl.Resources>
<Style x:Key="Datagrid" TargetType="{x:Type DataGrid}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="HeadersVisibility " Value="Column"/>
<Setter Property="VerticalGridLinesBrush " Value="{StaticResource DatagridVerticalLinesBrush}"/>
<Setter Property="HorizontalGridLinesBrush " Value="Transparent"/>
<Setter Property="RowHeaderWidth " Value="0"/>
<Setter Property="CanUserAddRows " Value="False"/>
<Setter Property="CanUserDeleteRows " Value="False"/>
</Style>
</UserControl.Resources>
问题是Visual Studio 2012设计器认为类型DataGrid上不存在这些属性。它说:成员"XXXXXXXXXXXXX"未被识别或无法访问。
尽管存在错误,但该样式在运行时应用正确,并且属性存在于DataGrid上(它们是DependencyProperies)并且是公共的。
你知道是什么导致它认为它们不存在吗?或者为什么设计师无法访问它们?
顺便说一句,Background属性还可以。只有其他7个有错误。
我已经在VS2012中加载了这个,创建了一个UserControl,添加了上面的样式。我观察到Background和BorderBrush属性被视为有效,但其他属性则不然。
然后。。。我注意到引用的名字中有空格。一旦移除,一切都会好起来。。。
<UserControl.Resources>
<Style x:Key="Datagrid" TargetType="{x:Type DataGrid}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="VerticalGridLinesBrush" Value="{StaticResource DatagridVerticalLinesBrush}"/>
<Setter Property="HorizontalGridLinesBrush" Value="Transparent"/>
<Setter Property="RowHeaderWidth" Value="0"/>
<Setter Property="CanUserAddRows" Value="False"/>
<Setter Property="CanUserDeleteRows" Value="False"/>
</Style>
</UserControl.Resources>
这可能是一个剪切/粘贴错误,但除了Background和BorderBrush之外,所有属性名称的右双引号前面都有一个额外的空格。解析器可能会在反射之前修剪属性名称,以便能够在运行时找到它。