6

Ich habe vier Datagrids auf einer Silverlight 4-Seite. Ich versuche, verschiedene Spaltenüberschriften für jedes Raster festzulegen. Ich fand diese XAML, die funktioniert, wenn ich es in <sdk:DataGrid.ColumnHeaderStyle> Tags in jedem Datagrid einbetten:XamlParseException aufgetreten: Fehler beim Erstellen eines 'System.Windows.Style' aus dem Text '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> 

Als ich es in einem separaten Ressourcenverzeichnis setzen und entfernen Sie die oben genannten Tags, es funktioniert auch, auf alle vier Header anwenden. Aber wenn ich versuche, eine bestimmte Version davon im Ressourcenverzeichnis zu erstellen, aber die erste Zeile auf diese Veränderung:

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

und das Hinzufügen dieser an das Datagrid:

ColumnHeaderStyle="PhoneMasterGridColumnHeader" 

ich den Fehler: XamlParseException aufgetreten: Fehler beim Erstellen eines 'System.Windows.Style' aus dem Text 'PhoneMasterGridColumnHeader'. Ich kann nicht herausfinden, was falsch ist. Ich habe immer noch Schwierigkeiten, Styles und Resource Dictionaries zu verstehen. Irgendeine Idee?

Antwort

7

Probieren Sie es wie folgt aus: -

ColumnHeaderStyle="{StaticResource PhoneMasterGridColumnHeader}" 

Die ColumnHeaderStyle Eigenschaft erwartet ein Objekt vom Typ Style zu empfangen. Nun könnte man diesen Wert wie folgt definieren: -

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

Oder Sie könnten für einige bizare Grund haben den Stil als Eigenschaft ausgesetzt HeaderStyle auf einem Ansichtsmodell genannt, die die aktuelle DataContext für das Gitter ist: -

<DataGrid ColumnHeaderStyle="{Binding HeaderStyle}" > 

Der Punkt ist, dass es verschiedene Arten gibt, wie Eigenschaftswerte in Xaml erfasst werden können. Die Referenzierung einer Ressource ist nur eine davon. Daher ist die einfache Angabe ColumnHeaderStyle="MyStyle" mindestens zweideutig, also müssen wir den Zustand explizieren, dass wir den Wert über statische Ressourcen erhalten wollen.

+0

Der erste löste es. Vielen Dank. – serialhobbyist

Verwandte Themen