2009-05-12 12 views
9

मेरे पास कई पंक्तियों और स्तंभों के साथ एक WPF ग्रिड है, जिसमें टेक्स्टब्लॉक और टेक्स्टबॉक्स जैसी सभी चीज़ें शामिल हैं।डब्ल्यूपीएफ ग्रिड - केवल एक कॉलम के लिए शैली कैसे लागू करें?

इस विशिष्ट स्थिति के लिए मैं कॉलम 1 में सभी चीजें पैडिंग के लिए चाहता हूं, और कॉलम 2 में सभी चीजें सही गठबंधन करने के लिए चाहते हैं। ऐसा लगता है कि ग्रिड में प्रत्येक आइटम पर उन गुणों को सेट करना बहुत गैर-डब्ल्यूपीएफ है।

मैं जानता हूँ कि मैं इस तरह कुछ कर रही द्वारा एक ग्रिड के भीतर सभी TextBlocks के लिए एक शैली बना सकते हैं:

<Grid> 
    <Grid.Resources> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="HorizontalAlignment" Value="Right"/> 
    </Style> 
    </Grid.Resources> 
</Grid> 

लेकिन वहाँ कॉलम 2 में केवल नियंत्रण करने के लिए है कि शैली लागू करने के लिए कहते हैं, एक तरीका है?

क्या मुझे एक अलग नियंत्रण का उपयोग करना चाहिए?

+0

यह देशी ग्रिड नियंत्रण के साथ संभव नहीं है .. हो सकता है कि आप कस्टम संलग्न संपत्ति का उपयोग कर ऐसा कुछ कर सकें –

उत्तर

17

यहाँ क्या मैं आमतौर पर करते है:

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}"> 
    <Style.Triggers> 
     <Trigger Property="Grid.Column" Value="0"> 
      <Setter Property="Margin" Value="0,0,2,0" /> 
     </Trigger> 

     <Trigger Property="Grid.Column" Value="2"> 
      <Setter Property="Margin" Value="20,0,2,0" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

वही है जो मैं ढूंढ रहा था! अच्छा और सुरुचिपूर्ण भी, मैंने इसके बारे में क्यों नहीं सोचा :) –

0

आप नीचे दिए गए जैसे कुछ शैलियों को परिभाषित कर सकते हैं और उन्हें अपने Column.ElementStyle संपत्ति के लिए आवंटित:

<Window.Resources> 
     <Style x:Key="elementStyle" TargetType="TextBlock"> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
      <Setter Property="Margin" Value="2,0,2,0" /> 
     </Style> 

     <Style x:Key="rightElementStyle" BasedOn="{StaticResource elementStyle}" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
     </Style> 

     <Style x:Key="centerElementStyle" BasedOn="{StaticResource elementStyle}" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
</Window.Resources> 

<dg:DataGrid AutoGenerateColumns="False"> 
     <dg:DataGrid.Columns> 
      <dg:DataGridTextColumn Binding={Binding Path=Name} 
            Header="Name" 
            ElementStyle="{StaticResource centerElementStyle}"/> 
      <dg:DataGridTextColumn Binding={Binding Path=Amount} 
            Header="Amount" 
            ElementStyle="{StaticResource rightElementStyle}"/> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 
+0

क्या यह केवल डेटाग्रिड के लिए है? मैं नहीं देख सकता कि इसे ग्रिड पर कैसे लागू करें। –

+0

आप प्रत्येक कॉलम में शैली असाइन कर सकते हैं। संपादित कोड देखें। – sacha

+0

मैं एक मानक ग्रिड के साथ ऐसा करने के लिए देख रहा था, लेकिन मैं डेटाग्रिड में एक नज़र डालेगा और देख सकता हूं कि मैं इसके बजाय इसका उपयोग कर सकता हूं या नहीं। –

संबंधित मुद्दे