代码之家  ›  专栏  ›  技术社区  ›  serialhobbyist

发生XamlParseException:未能创建系统.Windows.Style'来自文本'PhoneMasterGridColumnHeader'

  •  6
  • serialhobbyist  · 技术社区  · 14 年前

    我在silverlight4页面上有四个数据网格。我尝试为每个网格设置不同的列标题样式。我发现了这个XAML,当我将它嵌入到每个DataGrid中时,它就可以工作了 <sdk:DataGrid.ColumnHeaderStyle>

      <Style TargetType="primitives:DataGridColumnHeader" >
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="primitives:DataGridColumnHeader">
              <Grid Name="Root">
                <vsm:VisualStateManager.VisualStateGroups>
                  <vsm:VisualStateGroup x:Name="SortStates" >
                    <vsm:VisualStateGroup.Transitions>
                      <vsm:VisualTransition GeneratedDuration="00:00:0.1" />
                    </vsm:VisualStateGroup.Transitions>
                    <vsm:VisualState x:Name="Unsorted" />
                    <vsm:VisualState x:Name="SortAscending">
                      <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0" />
                      </Storyboard>
                    </vsm:VisualState>
                    <vsm:VisualState x:Name="SortDescending">
                      <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0" />
                        <DoubleAnimation Storyboard.TargetName="SortIconTransform" Storyboard.TargetProperty="ScaleY" Duration="0" To="-.9" />
                      </Storyboard>
                    </vsm:VisualState>
                  </vsm:VisualStateGroup>
                </vsm:VisualStateManager.VisualStateGroups>
                <Grid.RowDefinitions>
                  <RowDefinition Height="*" />
                  <RowDefinition Height="*" />
                  <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="Auto" />
                  <ColumnDefinition Width="*" />
                  <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Rectangle x:Name="BackgroundRectangle" Stretch="Fill" Grid.ColumnSpan="2" Grid.RowSpan="2">
                  <Rectangle.Fill>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                      <GradientStop Color="Transparent" Offset="0" />
                      <GradientStop Color="LavenderBlush" Offset="1" />
                    </LinearGradientBrush>
                  </Rectangle.Fill>
                </Rectangle>
                <ContentPresenter Grid.RowSpan="2" Content="{TemplateBinding Content}" Cursor="{TemplateBinding Cursor}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" />
                <Rectangle Name="VerticalSeparator" Grid.RowSpan="2" Grid.Column="2" Width="1" VerticalAlignment="Stretch" Fill="{TemplateBinding SeparatorBrush}" Visibility="{TemplateBinding SeparatorVisibility}" />
                <Path Grid.RowSpan="2" Name="SortIcon" RenderTransformOrigin=".5,.5" HorizontalAlignment="Left" VerticalAlignment="Center" Opacity="0" Grid.Column="1" Stretch="Uniform" Width="8" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z ">
                  <Path.Fill>
                    <SolidColorBrush Color="#FF444444" />
                  </Path.Fill>
                  <Path.RenderTransform>
                    <TransformGroup>
                      <ScaleTransform x:Name="SortIconTransform" ScaleX=".9" ScaleY=".9"  />
                    </TransformGroup>
                  </Path.RenderTransform>
                </Path>
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    

    当我把它放在一个单独的资源字典中并删除前面提到的标记时,它也可以工作,适用于所有四个头。但当我试图在资源字典中创建它的特定版本时,却将第一行改为:

    <Style x:Key="ADGridColumnHeader" TargetType="primitives:DataGridColumnHeader" >
    

    并将其添加到数据网格:

    ColumnHeaderStyle="PhoneMasterGridColumnHeader"
    

    我得到错误:发生XamlParseException:未能创建'系统.Windows.Style'来自文本'PhoneMasterGridColumnHeader'。我搞不清楚出了什么事。我仍在努力掌握样式和资源字典。你知道吗?

    1 回复  |  直到 14 年前
        1
  •  7
  •   AnthonyWJones    14 年前

    像这样试试看这是:-

     ColumnHeaderStyle="{StaticResource PhoneMasterGridColumnHeader}"
    

    ColumnHeaderStyle属性应接收类型为的对象 Style . 现在你可以定义这个值这是:-

     <DataGrid.ColumnHeaderStyle>
        <Style TargetType="primitives:DataGridColumnHeade">
          <!--  You setters here -->
        </Style>
     </DataGrid>
    

    HeaderStyle 在当前 DataContext 对于网格:-

     <DataGrid ColumnHeaderStyle="{Binding HeaderStyle}" >
    

    关键是,在Xaml中获取属性值有几种不同的方法。引用资源只是其中之一。因此简单地说 ColumnHeaderStyle="MyStyle"