6

मेरे पास सिल्वरलाइट 4 पृष्ठ पर चार डेटाग्रिड्स हैं। मैं प्रत्येक ग्रिड के लिए अलग-अलग कॉलम हेडर शैलियों को सेट करने का प्रयास कर रहा हूं। मैं इस XAML जो काम करता है जब मैं एक डेटा ग्रिड में एम्बेड <sdk:DataGrid.ColumnHeaderStyle> टैग के अंदर पाया:XamlParseException हुआ: टेक्स्ट 'PhoneMasterGridColumnHeader' से 'System.Windows.Style' बनाने में विफल

<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 हुआ: टेक्स्ट 'PhoneMasterGridColumnHeader' से 'System.Windows.Style' बनाने में विफल। मैं काम नहीं कर सकता कि क्या गलत है। मैं अभी भी स्टाइल और संसाधन शब्दकोश के साथ पकड़ने के लिए संघर्ष कर रहा हूं। कोई उपाय?

उत्तर

7

इस तरह यह प्रयास करें: -

ColumnHeaderStyle="{StaticResource PhoneMasterGridColumnHeader}" 

ColumnHeaderStyle संपत्ति प्रकार Style की एक वस्तु प्राप्त करने की उम्मीद कर रहा है। अब आप इस तरह है कि मूल्य निर्धारित कर सकते हैं: -

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

या आप कुछ bizare कारण के लिए शैली एक संपत्ति एक ViewModel पर HeaderStyle कहा जाता है जो ग्रिड के लिए वर्तमान DataContext है के रूप में सामने आ रहा हो सकता है: -

<DataGrid ColumnHeaderStyle="{Binding HeaderStyle}" > 

बिंदु यह है कि Xaml में संपत्ति मूल्यों को कई अलग-अलग तरीकों से हासिल किया जा सकता है। संसाधन का संदर्भ देना उनमें से एक है। इसलिए बस ColumnHeaderStyle="MyStyle" बताते हुए कम से कम संदिग्ध है इसलिए हमें राज्य की व्याख्या करने की आवश्यकता है कि हम स्थिर संसाधनों के माध्यम से मूल्य प्राप्त करना चाहते हैं।

+0

पहले व्यक्ति ने इसे हल किया। बहुत बहुत धन्यवाद। – serialhobbyist