2012-06-08 18 views
10

मैं डेटाग्रिडटेक्स्ट कॉलम का रंग बदलने की कोशिश कर रहा हूं।DataGridTextColumn टेक्स्ट रंग कैसे सेट करें?

यहाँ मैं क्या कर रहा है:

<DataGridTextColumn 
    Header="Status" 
    Binding="{Binding IsActive, 
       Converter= {StaticResource BoolToStatusConverter}}" 
    Foreground="{Binding Path=IsActive, 
       Converter={StaticResource BoolToColorConverter}}"/> 

पाठ ठीक से सेट कर दिया जाता है, लेकिन रंग में परिवर्तन नहीं होगा, और मैं निम्नलिखित त्रुटि हो रही है:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or 
FrameworkContentElement for target element. BindingExpression:Path=IsActive; 
DataItem=null; target element is 'DataGridTextColumn' (HashCode=40349079); target 
property is 'Foreground' (type 'Brush') 

मुझे क्या करना चाहिए इसके लिए काम करने के लिए?

+0

क्या आप पूरे कॉलम, या कोलम में व्यक्तिगत कोशिकाओं के लिए पृष्ठभूमि सेट करने की कोशिश कर रहे हैं? – Phil

+0

मैं अलग-अलग कक्षों के लिए FOREGROUND सेट करने की कोशिश कर रहा हूं –

उत्तर

9

आपको कॉलम के सेल स्टाइल के लिए डेटाट्रिगर के साथ एक स्टाइल निर्दिष्ट करने की आवश्यकता है। जैसे

<Page.Resources> 
    <Style TargetType="DataGridCell" x:Key="ActiveCellStyle"> 
     <Setter Property="Foreground" Value="Blue"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsActive}" Value="{x:Null}"> 
       <Setter Property="Foreground" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding IsActive}" Value="True"> 
       <Setter Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    <Converters:BoolToTextConverter 
     x:Key="BoolToStatusConverter" 
     TargetCondition="True" 
     IsMatchValue="It's active" 
     IsNotMatchValue="It's dead" /> 
</Page.Resources> 
<Grid> 
    <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn 
       Header="Status" 
       Binding="{Binding IsActive, 
        Converter={StaticResource BoolToStatusConverter}}" 
       CellStyle="{StaticResource ActiveCellStyle}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 
+0

रंगों के बजाय ठोस ब्रश लौटने के लिए BoolToColorConverter को संशोधित किया है सक्रिय सक्रिय हो सकता है। मैं इसे कैसे निर्दिष्ट करूं? –

+1

@ArsenZahray: शून्य के लिए ट्रिगर जोड़ा गया। मुझे लगता है कि आपकी स्थिति कनवर्टर हैंडल nulls। – Phil

+0

क्षमा करें क्योंकि मैं WPF के लिए नया हूं। मुझे आपके कोड में "कन्वर्टर्स" टैग के लिए अनसुलझे प्रतीक त्रुटि मिली है, मुझे परिभाषित करने के लिए अन्य कोड की क्या आवश्यकता है? – Danielle

0

अग्रभूमि एक ब्रश है, रंग नहीं। यह पार्स एक्सएएमएल में एक रंग हो सकता है, लेकिन जब आप कनवर्टर के साथ बाध्यकारी बनाते हैं तो इसका उपयोग नहीं किया जाता है।

एक बूलटब्रश कनवर्टर का उपयोग करें, या अग्रभूमि के रूप में एक सॉलिडकोलर ब्रश बनाएं और अपनी "रंग" संपत्ति को BoolToColorConverter से बांधें। इस तरह:

<DataGridTextColumn Header="Status"> 
    <DataGridTextColumn.Foreground> 
     <SolidColorBrush Color="{Binding Path=IsActive, Converter={StaticResource BoolToColorConverter}}" /> 
    </DataGridTextColumn.Foreground> 
</DataGridTextColumn> 
+1

मैंने देखा है, लेकिन मेरी समस्या यह है कि डब्ल्यूपीएफ बाध्यकारी में संपत्ति IsActive देखता है और इसे अग्रभूमि में नहीं देखता है। इस बीच, मैंने कलर –

7

जबकि तकनीकी रूप से एक DataGridTextColumn, यह है कि क्या मैं आमतौर पर करते हैं:

<DataGridTemplateColumn Header="Status" SortMemberPath="Status"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Status}" Foreground="{Binding Status, Converter={StaticResource StatusToSolidColor}}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

मैं DataContext कि मैं चाहता हूँ मिलता है, और मैं कन्वर्टर्स कि मैं पहले से ही बाकी हिस्सों में जगह में हो सकता है resuse कर सकते हैं आवेदन के फ़्यूथरमोर, वांछित प्रभाव प्राप्त करने के लिए मुझे कठोर कोड/शैलियों और डेटा ट्रिगर्स का एक अतिरिक्त सेट बनाए रखने की आवश्यकता नहीं है।

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