2012-01-04 26 views
6

के अंदर से GridViewColumnHeader शैली सेट करें मेरी परियोजनाओं में से एक में मैंने एक सूची दृश्य विरासत में लिया है और एक नया नियंत्रण टेम्पलेट सेट करके शैली को ओवरराइड किया है। मैंने स्तंभ शीर्षलेख शैली को भी ओवरराइड कर दिया है। अब तक मैं दो तरीकों से यह करने के लिए मिल गया है:एक सूची दृश्य शैली

1) एक शैली कुंजी की स्थापना और GridView में शैली को संदर्भित द्वारा:

<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
    <Setter Property="Background" Value="Wheat" /> 
</Style> 

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 

2) ऊपर शैली के लिए एक शैली कुंजी की स्थापना नहीं करके। अब मुझे ग्रिड व्यू में शैली का संदर्भ देने की आवश्यकता नहीं है, लेकिन यह सूचीदृश्य प्रकार से स्वतंत्र मेरे एप्लिकेशन में सभी सूची दृश्य शीर्षलेखों को ओवरराइड करता है।

चूंकि मैं अपने आवेदन में कई सूचीदृश्यों का उपयोग करता हूं, इसलिए मैं इसे तीसरे और अधिक लचीले तरीके से पूरा करना चाहता हूं; एक सूची दृश्य शैली के अंदर से GridView.ColumnHeaderContainerStyle सेट करके। इस तरह मुझे प्रत्येक ग्रिड व्यू में हेडर शैली का संदर्भ देने की आवश्यकता नहीं होगी। यहाँ XAML का एक सरलीकृत संस्करण अब तक है:

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
     <Setter Property="Background" Value="Wheat" /> 
    </Style> 

    <Style TargetType="{x:Type list:MyListView}"> 
     <Setter Property="GridView.ColumnHeaderContainerStyle" Value="{StaticResource MyHeaderStyle}" />    
     <Setter Property="Background" Value="Linen" />         
    </Style> 
</Window.Resources> 

<list:MyListView> 
    <list:MyListView.View> 
     <GridView> 
      <GridViewColumn Header="Column1" /> 
      <GridViewColumn Header="Column2" /> 
     </GridView> 
    </list:MyListView.View> 
</list:MyListView> 

यह दुर्भाग्य हैडर शैली निर्धारित नहीं करता है ... मैं ऊपर XAML को यह बदलाव करते हैं, यह काम करता है:

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 

कोई विचार?

उत्तर

6

धन्यवाद सही दिशा में मुझे इंगित करने के लिए snurre। मुझे वही हासिल करने का एक तरीका मिला जो मैं चाहता था।

आपको ListView के भीतर संसाधन अनुभाग को रखने की आवश्यकता नहीं है (प्रत्येक सूची दृश्य के लिए उस तरह के कस्टम टैग मैं पहले से छुटकारा पाने के लिए चाहता हूं)। संसाधनों को बजाय सूची दृश्य शैली में ले जाया जा सकता है।

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
     <Setter Property="Background" Value="Wheat" /> 
    </Style> 

    <Style TargetType="{x:Type list:MyListView}"> 
     <Style.Resources> 
      <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource MyHeaderStyle}" /> 
     </Style.Resources> 

     <Setter Property="Background" Value="Linen" />         
    </Style> 
</Window.Resources> 

<list:MyListView> 
    <list:MyListView.View> 
     <GridView> 
      <GridViewColumn Header="Column1" x:Name="col1" /> 
      <GridViewColumn Header="Column2" x:Name="col2" /> 
     </GridView> 
    </list:MyListView.View> 
</list:MyListView> 
:

यहाँ अद्यतन XAML कि वास्तव में जिस तरह से मैं इसे करना चाहते हैं काम करता है

3

यदि कोई कुंजी नहीं है, तो यह निर्दिष्ट TargetType के सभी तत्वों पर लागू होता है। अपनी शैली के लिए एक महत्वपूर्ण है, तो आप यह स्पष्ट रूप से उपयोग करने के लिए:

<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Column1"/> 

फिर, आप अपने ListView भीतर शैली सेट कर सकते हैं, तो यह केवल यह अंदर तत्वों पर लागू होता है:

<list:MyListView> 
    <list:MyListView.Resources> 
     <Style TargetType="{x:Type GridViewColumnHeader}"> 
      <Setter Property="Background" Value="Wheat" /> 
     </Style> 
    </list:MyListView.Resources> 
</list:MyListView> 
संबंधित मुद्दे