2009-07-28 12 views
18

मैं इस से चला गया: WPF GridViewHeader styling questionsआप एक WPF ग्रिड व्यू हेडर कैसे शैलीबद्ध करते हैं?

इस के लिए

:

WPF GridView Headers

अब मैं सिर्फ "आकार" शीर्षलेख की दाईं ओर सफेद स्थान से छुटकारा पाने की जरूरत है। मैं मूल रूप से GridViewColumnHeader के लिए एक टेम्पलेट है जो इसे टेक्स्टब्लॉक बनाता है। क्या कोई तरीका है कि मैं उस हेडर क्षेत्र के लिए पृष्ठभूमि सेट कर सकता हूं ताकि वह ग्रिड व्यू की पूरी चौड़ाई फैल सके?

में कोड:

यह मेरा सबसे दाएं कॉलम है। ग्रिड 100% उपलब्ध खिड़की क्षेत्र नहीं फैलता है। शीर्षलेख में मुझे कॉलम हेडर के रूप में समान पृष्ठभूमि रखने के लिए इस कॉलम के दाईं ओर सबकुछ चाहिए।

<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> 

अद्यतन

मैं कर रहा हूँ एक कदम और करीब (मुझे लगता है कि) इस को हल करने के।

मैं GridView टैग के अंदर निम्नलिखित कोड कहा:

<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> 

सीमा वहाँ सिर्फ इसलिए कि तुम क्या इस शैली को शामिल किया गया की सीमा देख सकते हैं। यह एक बढ़ी हुई छवि है जो यह करता है। ऐसा लगता है कि मैं चाहता हूं कि अगर मैं नीचे की छोटी सफेद सीमा से छुटकारा पा सकता हूं।

तो मुझे लगता है कि उस छोटे सफेद तल सीमा को हटाने का भी एक स्वीकार्य उत्तर होगा।

+1

यह शायद अपने मौजूदा कोड/XAML पोस्ट करने के लिए मदद मिलेगी। –

+0

मैंने अभी कुछ कोड जोड़ा है। – djschwartz

उत्तर

1

GridViewColumnHeader.Role संपत्ति पर एक नज़र डालें। GridViewColumnHeaderRole गणना के लिए प्रलेखन में नमूना आपको कुछ विचार दे सकता है ...

संपादित करें: क्या आपने GridView.HeaderStyle संपत्ति का उपयोग करने पर विचार किया है?

+0

मुझे नहीं पता कि पाठक भूमिका संपत्ति कैसे मुझे पूरे हेडर पंक्ति को स्टाइल करने में मदद करेगी। – djschwartz

+0

यह नहीं होगा, लेकिन यह संभवतः आपको "पैडिंग" भूमिका के साथ "डमी" कॉलम हेडर को स्टाइल करने दे सकता है, फिर भी, मुझे अभी एक और विचार मिला है, मेरा अपडेट किया गया जवाब –

+0

मैंने ग्रिडव्यू.हेडर स्टाइल का उपयोग करने पर विचार किया - क्योंकि मैं हूं एएसपी.NET काम करने के लिए प्रयोग किया जाता है। यह डब्ल्यूपीएफ में है और ऐसा कोई प्रतीत नहीं होता है (वीएस इंटेलिसेंस के अनुसार) कोई भी GridView.HeaderStyle। हालांकि यह सुनिश्चित करने के लिए मैं इसे देख लूंगा। – djschwartz

0

मैंने इस मुद्दे को हल किया लेकिन मुझे लगता है कि ऐसा करने का एक बेहतर तरीका होना चाहिए। समस्या यह थी कि मेरे पास प्रत्येक कॉलम के शीर्ष पर टेक्स्टब्लॉक था। अप्रयुक्त क्षेत्र में हेडर पंक्ति पर कुछ भी नहीं था। मैंने GridView.ColumnHeaderContainerStyle में एक ही पृष्ठभूमि के साथ एक टेक्स्टब्लॉक जोड़ा है और यह ग्रिड की बाकी अप्रयुक्त चौड़ाई को विस्तारित करने के लिए हुआ।

<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

यह एक साधारण शैली है जो आप जो खोज रहे हैं उसे पूरा करेंगे। सीमा पर पारदर्शी पृष्ठभूमि को बस वांछित ढाल के रूप में बदलें।

<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

मुझे यकीन नहीं है कि मैं आपका प्रश्न समझ गया हूं (छवि लिंक मर चुके हैं) लेकिन कभी-कभी सबसे आसान तरीका सबसे अच्छा तरीका है।

संसाधन में कुछ इस तरह परिभाषित करें:

<Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}"> 
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"/> 
    <Setter Property="TextBlock.Foreground" Value="Black"/> 
</Style> 
संबंधित मुद्दे