0

在 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 上不存在。它说:成员“XXXXXXXXXXXX”无法识别或无法访问

尽管存在错误,但该样式在运行时已正确应用,并且属性存在于 DataGrid 上(它们是 DependencyProperies)并且是公共的。

知道是什么导致它认为它们不存在或为什么设计师无法访问它们吗?

顺便说一句,Background 属性没问题。只有其他 7 个有错误。

4

2 回答 2

1

我已经在 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>
于 2013-02-11T23:55:57.357 回答
1

这可能是剪切/粘贴错误,但在除 Background 和 BorderBrush 之外的所有属性名称的右双引号之前有一个额外的空格。解析器可能会在反射之前修剪属性名称,以便它能够在运行时找到它。

于 2013-02-11T23:58:06.690 回答