6

Tengo cuatro datagrids en una página de Silverlight 4. Estoy tratando de establecer diferentes estilos de encabezado de columna para cada grilla. He encontrado este XAML, que funciona cuando lo integrar en cada cuadrícula de datos dentro <sdk:DataGrid.ColumnHeaderStyle> etiquetas:XamlParseException ocurrió: Error al crear un 'System.Windows.Style' desde el texto 'PhoneMasterGridColumnHeader'

<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> 

Cuando lo puse en un diccionario de recursos separar y eliminar las etiquetas antes mencionadas, sino que también funciona, aplicando a las cuatro cabeceras. Pero cuando intento de crear una versión específica de la misma en el diccionario de recursos pero cambiando la primera línea a la siguiente:

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

y añadir esto a la cuadrícula de datos:

ColumnHeaderStyle="PhoneMasterGridColumnHeader" 

me sale el error: XamlParseException producido: no se pudo crear un 'System.Windows.Style' del texto 'PhoneMasterGridColumnHeader'. No puedo resolver lo que está mal. Todavía estoy luchando para familiarizarme con los diccionarios de estilos y recursos. ¿Alguna idea?

Respuesta

7

Trate de esta manera: -

ColumnHeaderStyle="{StaticResource PhoneMasterGridColumnHeader}" 

La propiedad ColumnHeaderStyle está a la espera de recibir un objeto de tipo Style. Ahora se podría definir ese valor de la siguiente manera: -

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

O puede ser que por alguna razón bizare tener el estilo expuesto como una propiedad llamada HeaderStyle en un modelo de vista que es el actual DataContext para la red: -

<DataGrid ColumnHeaderStyle="{Binding HeaderStyle}" > 

El punto es que hay varias maneras diferentes en que se pueden adquirir valores de propiedades en Xaml. Hacer referencia a un recurso es solo uno de ellos. Por lo tanto, simplemente declarar ColumnHeaderStyle="MyStyle" es al menos ambiguo, por lo que debemos indicar explícitamente que queremos adquirir el valor a través de recursos estáticos.

+0

El primero lo resolvió. Muchas gracias. – serialhobbyist

Cuestiones relacionadas