2009-07-28 5 views
18

ich aus dieser ging: WPF GridViewHeader styling questionsWie formatieren Sie einen WPF GridView-Header?

dazu:

WPF GridView Headers

Jetzt muss ich von den weißen Raum rechts von der „Größe“ Header erhalten nur los zu werden. Ich habe im Grunde eine Vorlage für den GridViewColumnHeader, die es zu einem TextBlock macht. Gibt es eine Möglichkeit, den Hintergrund für diesen Kopfbereich so festzulegen, dass er die gesamte Breite des GridViews umfasst?

ADDED Code:

Das ist mein ganz rechten Spalte. Das Raster überspannt nicht 100% der verfügbaren Fensterfläche. In der Kopfzeile muss alles auf der rechten Seite dieser Spalte denselben Hintergrund wie die Spaltenüberschriften haben.

<Style x:Key="GridHeaderRight" TargetType="{x:Type GridViewColumnHeader}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type GridViewColumnHeader}"> 
          <TextBlock Text="{TemplateBinding Content}" Padding="5" Width="{TemplateBinding Width}" TextAlignment="Right"> 
           <TextBlock.Background> 
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
             <GradientStop Offset="0.0" Color="#373638" /> 
             <GradientStop Offset="1.0" Color="#77797B" /> 
            </LinearGradientBrush> 
           </TextBlock.Background> 
          </TextBlock> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="OverridesDefaultStyle" Value="True" /> 
       <Setter Property="Background" Value="Green" /> 
       <Setter Property="Foreground" Value="White" /> 
       <Setter Property="FontSize" Value="12" /> 
       <Setter Property="Background"> 
        <Setter.Value> 
         <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
          <GradientStop Offset="0.0" Color="#373638" /> 
          <GradientStop Offset="1.0" Color="#77797B" /> 
         </LinearGradientBrush> 
        </Setter.Value> 
       </Setter> 
      </Style> 

<GridViewColumn Width="200" HeaderContainerStyle="{ StaticResource GridHeaderRight}" Header="Size"> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <TextBlock Text="{Binding Path=EmployeeNumber}" HorizontalAlignment="Right"></TextBlock> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 

UPDATE

Ich bin einen Schritt näher (glaube ich) zu dieser Lösung.

Ich habe den folgenden Code innerhalb des Gridview-tag:

<GridView.ColumnHeaderContainerStyle> 
    <Style TargetType="GridViewColumnHeader"> 
     <Setter Property="BorderThickness" Value="1"></Setter> 
     <Setter Property="BorderBrush" Value="Green"></Setter> 
     <Setter Property="Height" Value="Auto"></Setter> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
        <GradientStop Offset="0.0" Color="#373638" /> 
        <GradientStop Offset="1.0" Color="#77797B" /> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</GridView.ColumnHeaderContainerStyle> 

Die Grenze ist es nur so können Sie die Grenze sehen, was dieser Stil abdeckt. Dies ist ein vergrößertes Bild dessen, was dies tut. Es scheint, was ich will, wenn ich den kleinen weißen Rand auf der Unterseite loswerden kann.

Also ich denke, das Entfernen dieser kleinen weißen unteren Grenze wäre auch eine akzeptierte Antwort für diese.

+1

Es wird wahrscheinlich Ihre vorhandenen Code/XAML schreiben helfen. –

+0

Ich habe jetzt einen Code hinzugefügt. – djschwartz

Antwort

1

Werfen Sie einen Blick auf die GridViewColumnHeader.Role Eigenschaft. Das Beispiel in der Dokumentation für die GridViewColumnHeaderRole Aufzählung könnte Ihnen einige Ideen geben ...

EDIT: Haben Sie in Betracht gezogen, die GridView.HeaderStyle Eigenschaft zu verwenden?

+0

Ich sehe nicht, wie die schreibgeschützte Role-Eigenschaft mir helfen wird, die gesamte Kopfzeile zu formatieren. – djschwartz

+0

Es wird nicht, aber es kann wahrscheinlich lassen Sie die "Dummy" Spaltenüberschrift mit der Rolle "Padding" Stil Wie auch immer, ich habe gerade eine andere Idee, siehe meine aktualisierte Antwort –

+0

Ich habe GridView.HeaderStyle in Betracht gezogen - weil ich bin Ich bin es gewohnt, ASP.NET zu arbeiten. Dies ist in WPF und es scheint nicht (nach VS intellisense) GridView.HeaderStyle. Ich werde es überprüfen, um sicherzustellen, obwohl. – djschwartz

0

Ich habe dieses Problem gelöst, aber ich denke, es sollte einen besseren Weg geben, es zu tun. Das Problem war, dass ich TextBlocks in der Kopfzeile jeder Spalte hatte. Der unbenutzte Bereich hatte nichts in der Kopfzeile. Ich habe gerade einen TextBlock mit dem gleichen Hintergrund im GridView.ColumnHeaderContainerStyle hinzugefügt und es überspannt den Rest der ungenutzten Breite des Rasters.

<GridView.ColumnHeaderContainerStyle> 
    <Style TargetType="GridViewColumnHeader"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GridViewColumnHeader}"> 
        <TextBlock Text="" Padding="5"> 
         <TextBlock.Background> 
          <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
           <GradientStop Offset="0.0" Color="#373638" /> 
           <GradientStop Offset="1.0" Color="#77797B" /> 
          </LinearGradientBrush> 
         </TextBlock.Background> 
        </TextBlock> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</GridView.ColumnHeaderContainerStyle> 
10

Dies ist ein einfacher Stil, der das erreichen wird, wonach Sie suchen. Ändern Sie einfach den transparenten Hintergrund auf dem Rahmen, um Ihr gewünschter Verlauf zu sein.

<Style TargetType="{x:Type GridViewColumnHeader}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GridViewColumnHeader}"> 
        <Border BorderThickness="0,0,0,1" BorderBrush="Black" Background="Transparent"> 
         <TextBlock x:Name="ContentHeader" Text="{TemplateBinding Content}" Padding="5,5,5,0" Width="{TemplateBinding Width}" TextAlignment="Center" /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="Foreground" Value="Black" /> 
     <Setter Property="FontFamily" Value="Segoe UI" /> 
     <Setter Property="FontSize" Value="12" /> 
    </Style> 
2

Ich bin mir nicht sicher, ob ich Ihre Frage verstanden (Bild Links tot sind), aber manchmal ist der einfachste Weg ist der beste.

definieren so etwas wie dies in Ressourcen:

<Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}"> 
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"/> 
    <Setter Property="TextBlock.Foreground" Value="Black"/> 
</Style>