2012-12-17 16 views
8

AlternatingRowBackground के बाद आवेदन करने के लिए मैं अपना RowStyle कैसे बना सकता हूं? मुझे आइटम चाहिए, IsOrangetrue के रूप में Orange पृष्ठभूमि को वैकल्पिक रूप से पंक्ति पृष्ठभूमि की परवाह किए बिना, जो वर्तमान में मामला नहीं है।WPF DataGrid AlternatingRowBackground और RowStyle प्राथमिकता

XAML:

<DataGrid Name="g" 
    AlternatingRowBackground="Blue" 
    AlternationCount="2" 
    ... 
    SelectionMode="Single"> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsOrange}" Value="Y"> 
        <Setter Property="Background" Value="Orange" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    ... 
</DataGrid> 
+0

जहां ऑरेंज संपत्ति स्थित है, क्या यह सीधे विंडो संदर्भ पर स्थित है ?? – MoHaKa

+0

मेरे पास एक व्यूमोडेल SomethingWhichCanBeOrangeViewModel है जिसमें बूलियन IsRange संपत्ति है। मेरे ग्रिड में यह ऑब्जेक्ट्स को ऑब्जर्जेबल कोलेक्शन पर सेट किया गया है । – user1514042

+0

ठीक है, तो आप सुनिश्चित हैं कि आपकी संपत्ति आपके डेटाग्रिड में पहुंच योग्य है। – MoHaKa

उत्तर

12

यह एक बग नहीं है। Style में आप वैकल्पिक पंक्ति के लिए स्थानीय मान सेट को ओवरराइड नहीं कर सकते हैं। यही कारण है कि इस

<DataGrid AlternatingRowBackground="Blue" 

काम नहीं करेगा, लेकिन आप आप this answer को

<DataGrid.Style> 
    <Style TargetType="DataGrid"> 
     <Setter Property="AlternatingRowBackground" Value="Blue"/> 
    </Style> 
</DataGrid.Style> 

धन्यवाद कर सकते हैं एक Style में AlternatingRowBackground निर्धारित करते हैं।

+0

सहमत हैं, लेकिन यह काउंटर अंतर्ज्ञानी है कि स्टाइल के बाद पंक्ति बीजी को वैकल्पिक रूप से लागू किया जाता है। – user1514042

+0

धन्यवाद! यह वही समाधान था जिसे मैं ढूंढ रहा था। –

2

मेरे कार्यक्रम में मेरे पास मुख्य विंडो के अलावा दो कक्षाएं हैं जिनमें केवल एक डेटागर्ड है। की पहली कक्षा से शुरू करते हैं:

MyClass.cs:

public class MyClass 
{ 
    public bool IsOrange { get; set; } 

    public string Name { get; set; } 
} 

मैं केवल दो गुण होते हैं, IsOrange निर्दिष्ट करती है कि पंक्ति नारंगी होना चाहिए। ((अन्य संपत्ति की परवाह नहीं है।))

अब मॉडल मॉडल क्लास में केवल MyClass का संग्रह होता है।

MyClassViewModel.cs:

public class MyClassViewModel 
{ 
    public ObservableCollection<MyClass> con { get; set; } 

    public MyClassViewModel() 
    { 
     con = new ObservableCollection<MyClass>(); 

     con.Add(new MyClass { IsOrange = true, Name = "Aa" }); 
     con.Add(new MyClass { IsOrange = true, Name = "Bb" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Cc" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Dd" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Ee" }); 
     con.Add(new MyClass { IsOrange = true, Name = "Ff" }); 
     con.Add(new MyClass { IsOrange = true, Name = "Gg" }); 
     con.Add(new MyClass { IsOrange = false, Name = "Hh" }); 
    } 
} 

MainWindow.xaml में:

<Grid> 
    <DataGrid Margin="10" ItemsSource="{Binding Path=con}" > 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=IsOrange}" Value="true"> 
         <Setter Property="Background" Value="Orange" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 
</Grid> 

अंत में MainWindow.xaml.cs में:

public partial class MainWindow : Window 
{ 
    MyClassViewModel VM = new MyClassViewModel(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     DataContext = VM; 
    } 
} 

और यह वह जगह है परिणाम:

enter image description here

आप एप्लिकेशन भेजने के लिए मुझे अपने ईमेल भेज सकते हैं।

अच्छी किस्मत :)

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