2008-11-28 14 views
8

में डेटाग्रिड हेडर का पृष्ठभूमि रंग बदलें मैं सिल्वरलाइट में डेटाग्रिड हेडर का पृष्ठभूमि रंग बदलना चाहता हूं।सिल्वरलाइट

उत्तर

7

हालांकि डेटाग्रिड हेडर पृष्ठभूमि संपत्ति का पर्दाफाश नहीं करता है, लेकिन इसमें कॉलमहेडर स्टाइल के लिए एक संपत्ति है। उस तकनीक का उपयोग करना जिसे डेनियल ने पहले एक कॉलम के लिए सुझाया था, हम दाएं हाथ की खाली जगह सहित सभी हेडर कॉलम के लिए हेडर टेम्पलेट को प्रतिस्थापित कर सकते हैं। एक शीर्षलेख के लिए पूरे टेम्पलेट को बदलने के साथ नीचे की तरफ यह है कि हम सॉर्टिंग तीर और विभाजक खो देते हैं जो डिफ़ॉल्ट शीर्षलेख टेम्पलेट में मौजूद होते हैं। सौभाग्य से हम उपयोग किए जा रहे डिफ़ॉल्ट टेम्पलेट को निकालने के लिए template browser का उपयोग कर सकते हैं और फिर इसकी एक प्रति संशोधित कर सकते हैं।

यहां मैंने एक त्वरित उदाहरण फेंक दिया है जो विभाजक और सॉर्टिंग को रखते हुए कॉलम हेडर की पृष्ठभूमि को लाइटब्लू में बदल देगा। कलमहेडर पर माउस hovers जब पृष्ठभूमि को संशोधित करने के साथ कैसे निपटने के लिए template browser में डिफ़ॉल्ट DataGridColumnHeader टेम्पलेट पर एक नज़र डालें।

DataGrid Header Background http://i34.tinypic.com/2q2ixch.jpg

<data:DataGrid x:Name="grid"> 
    <data:DataGrid.ColumnHeaderStyle> 
     <Style 
      xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
      xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" 
      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" Fill="LightBlue" Grid.ColumnSpan="2" Grid.RowSpan="2" /> 
          <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> 
    </data:DataGrid.ColumnHeaderStyle> 
</data:DataGrid> 

आशा इस मदद करता है!

+0

वह बेहद सहायक डेविड था! – ScottG

+0

दुर्भाग्य से यह हेडर टेक्स्ट को संरेखित नहीं करता है .. बावजूद मैंने सब कुछ करने की कोशिश की है – user1034912

1

मैं एक "साफ" समाधान के साथ आया .. उम्मीद है कि यह आपके लिए काम करता है। मैं बस डेटाग्रिड को ओवरराइड करता हूं और मैंने GetTemplateChild विधि का खुलासा किया। यह का उपयोग करके आप DataGridColumnHeaderPresenter और DataGridColumnHeaders उसमें शामिल उपयोग कर सकते हैं ...

1) अवहेलना datagrid

/// <summary> 
/// Extends the DataGrid so that it's possible to access the template objects 
/// </summary> 
public class DataGridEx : System.Windows.Controls.DataGrid 
{ 
    /// <summary> 
    /// Exposes Template items 
    /// </summary> 
    public Object GetTemplateObject(String name) 
    { 
     return this.GetTemplateChild(name); 
    } 
} 

2) पृष्ठभूमि बदलें

DataGridEx ग्रिड = नए DataGridEx();

... के बाद टेम्पलेट लागू किया जाता है ...

DataGridColumnHeadersPresenter obj = DataGrid.GetTemplateObject ("ColumnHeadersPresenter") DataGridColumnHeadersPresenter के रूप में;

डेटाग्रिड कॉलम हैडर एच = obj.Children [0] DataGridColumnHeader के रूप में;

एच। बैकग्राउंड = नया सॉलिडकॉलर ब्रश (रंग। रेड);