मैं एक विंडोज़ यूडब्ल्यूपी एप्लीकेशन में डेटाग्रिड के साथ काम कर रहा हूं।

मैं अपने मॉडल में एक रंग मान पर बाध्य करके DataGridTextColumn की अग्रभूमि संपत्ति सेट करने का प्रयास कर रहा हूं। मेरे मॉडल ऑब्जेक्ट में एक संपत्ति है, जिसे रंग कहा जाता है, जो कि Windows.UI.Xaml.Media.Brush प्रकार का मान देता है। चूंकि यह अग्रभूमि संपत्ति के समान प्रकार है, मुझे लगता है कि मैं इसे सीधे सेट कर सकता हूं, जैसे:

<DataGridTextColumn Foreground="{Binding Path=Color}" ...

हालांकि, इसका परिणाम रनटाइम अपवाद में होता है जो कहता है, "संपत्ति असाइन करने में विफल"।

मैंने कोड नमूने देखे हैं जो एक ही काम कर रहे हैं, और मैं यह समझने के लिए संघर्ष कर रहा हूं कि यह काम क्यों नहीं करेगा।

0
Flarosa 29 जिंदा 2021, 06:25

2 जवाब

सबसे बढ़िया उत्तर

दस्तावेज़, हम जानते हैं कि {Binding} मार्कअप एक्सटेंशन का लक्ष्य बनने के लिए प्रॉपर्टी एक डिपेंडेंसी प्रॉपर्टी होनी चाहिए, लेकिन {x :बाइंड} की यह आवश्यकता नहीं है क्योंकि यह अपने बाध्यकारी मूल्यों को लागू करने के लिए जेनरेट कोड का उपयोग करता है। कोड, Foreground प्रॉपर्टी एक डिपेंडेंसी प्रॉपर्टी नहीं है, इसलिए यह {Binding} एक्सटेंशन द्वारा डेटा बाइंडिंग करने के लिए समर्थित नहीं है Foreground संपत्ति के लिए।

आप DataGridTemplateColumn उदाहरण।

उदाहरण के लिए:

<controls:DataGrid.Columns>
    <controls:DataGridTemplateColumn Header="header">
        <controls:DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate x:DataType="local:Customer">
                <StackPanel >
                //MyBrush is a SolidColorBrush in Customer class, adjust it for your scenario
                    <TextBlock Text="{x:Bind FirstName}" Foreground="{x:Bind MyBrush}"/>  
                </StackPanel>
            </DataTemplate>
        </controls:DataGridTemplateColumn.CellEditingTemplate>
    </controls:DataGridTemplateColumn>
0
YanGu 29 जिंदा 2021, 09:48

दुर्भाग्य से, यह मुद्दा अभी भी मुझे परेशान कर रहा है।

मैंने सोचा कि मैं पंक्ति रंग को गतिशील रूप से सेट करने में कामयाब रहा, लेकिन यह पता चला कि मैंने जो गतिशील रंग चुना वह डिफ़ॉल्ट रंग के समान था, और जब मैंने इसे बदला, तो कुछ भी नहीं हुआ।

तो मैं अभी भी एक समाधान की तलाश में हूं।

मेरे पास बहुत सारे कॉलम हैं। मेरे लिए ऐसे समाधान को लागू करना संभव नहीं होगा जिसके लिए XML की 10+ पंक्तियों को दर्जनों बार चिपकाने की आवश्यकता हो।

कोड में ऐसा करने का कोई तरीका नहीं है? क्या मैं किसी भी तरह टेक्स्ट वाले यूआई तत्व को पकड़ सकता हूं, और इसे संशोधित कर सकता हूं?

मैं जो कर रहा हूं उसका एक उदाहरण यहां दिया गया है। TextWrapping और TextAlignment सेटिंग्स काम करती हैं, लेकिन अग्रभूमि सेटिंग काम नहीं करती है, भले ही मैं इसे एक स्थिर मान निर्दिष्ट करता हूं।

                <controls:DataGridTextColumn x:Name="notesCol" Binding="{Binding Notes, Mode=OneWay}" MaxWidth="500" Header="Notes" Tag="Notes">
                <controls:DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBlock">
                        <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                        <Setter Property="TextBlock.TextAlignment" Value="Left"/>
                        <Setter Property="TextBlock.Foreground" Value="Green"/>
                    </Style>
                </controls:DataGridTextColumn.ElementStyle>
            </controls:DataGridTextColumn>
0
Flarosa 4 फरवरी 2021, 04:01