2012-12-10 5 views
9

मैं हो रहा बल्कि एक विचित्र बात आई है, मुझे लगता है कि है निम्नलिखित घोषित एक DataGrid एक WPF XMAL पेज में परिभाषित किया गया है:XAML सिंटेक्स त्रुटि डिजाइनर ब्लॉक कर रहा है लेकिन संकलन ठीक

<DataGrid.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF3399FF" /> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="White" /> 
    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#FF3399FF"/> 
    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="White" /> 
</DataGrid.Resources> 

तकनीकी तौर पर दो InactiveSystemColors प्रकार .NET 4.5 से हैं, हालांकि मैं प्रोग्राम को संकलित कर सकता हूं .नेट 4 को लक्षित करने के लिए सेट किया गया है, और इन निष्क्रिय ब्रश काम करते हैं, लेकिन जब यह लक्ष्य निर्धारित करने के लिए सेट है। 4 दृश्य विजुअल स्टूडियो में एक्सएमएएल डिजाइनर पेज लोड करने से त्रुटि The member "InactiveSelectionHighlightTextBrushKey" is not recognized or is not accessible. और फिर डिजाइनर दृश्य को अवरुद्ध करता है। लेकिन यह अभी भी प्रोग्राम में ऊपर परिभाषित अनुसार संकलित और प्रदर्शित करता है।

यह कम से कम कहने के लिए बहुत असंगत लगता है और मैं यह नहीं बता सकता कि यह एक विजुअल स्टूडियो 2012 मुद्दा है या यदि यह प्रोग्राम को संकलित करने की इजाजत दे रहा है क्योंकि मेरे विकास कंप्यूटर में .NET 4.5 स्थापित है और यह केवल लक्ष्य ढांचे को बदल रहा है जब यह देखता है कि कुछ इसका उपयोग कर रहा है (मुझे इस पर संदेह है)। या यह संभव है कि निष्क्रिय प्रकार .NET 4 में हैं लेकिन दस्तावेज़ीकरण में समर्थित के रूप में सूचीबद्ध नहीं हैं और केवल इस समस्या को वीएस में बनाते हैं?

क्या मुझे नेट 4 में ऐसा करने का बेहतर तरीका है ताकि मुझे डेटाग्रिड पंक्ति के निष्क्रिय चयन रंग को सेट किया जा सके? या .NET 4.5 में अपग्रेड करने का यह एकमात्र तरीका है?

+0

क्या होता है जब आप अपने प्रोग्राम को 4.5 इंस्टॉल किए बिना मशीन पर चलाते हैं? – Nzc

+0

मेरी इच्छा है कि मैं इसका परीक्षण कर सकूं लेकिन इसमें 4.5 के बिना कंप्यूटर नहीं है। –

+0

@Nzc - ऐप 4.5 के बिना मशीन पर चलाने में विफल रहता है (केवल मेरे ऐप्स में से किसी एक में इस समस्या में यादृच्छिक रूप से भाग गया और संकल्प खोजने का प्रयास करते समय इस SO प्रश्न में आया)। – Scott

उत्तर

15

विजुअल स्टूडियो एक असेंबली बनाता है, भले ही उसका लक्ष्य .NET FW 4.0 पर सेट हो और आप XAML-code में InactiveSelectionHighlightBrushKey का उपयोग करें। यह असेंबली .NET FW 4.5 वाले सिस्टम में सही ढंग से निष्पादित की जाएगी। लेकिन अगर सिस्टम में केवल .NET FW 4.0 है, तो पर एक अपवाद फेंक दिया जाएगा जब सिस्टम InactiveSelectionHighlightBrushKey के साथ उपयोगकर्ता नियंत्रण बनाते हैं।

तो आप FW 4.0 पर लक्ष्य सेट के साथ असेंबली में InactiveSelectionHighlightBrushKey का उपयोग नहीं कर सकते हैं, क्योंकि वे केवल .NET FW 4.0 के साथ सिस्टम में काम नहीं करेंगे।

एफडब्ल्यू 4.0 और एफडब्ल्यू 4.5 दोनों का समर्थन करने के लिए आप LostFocus/LostKeyboardFocus/GotFocus घटनाओं के हैंडलर में चयनित पंक्ति का रंग सेट कर सकते हैं। उदाहरण कोड https://stackoverflow.com/a/8095932/1815957

+0

यह जानना वाकई अच्छा है, अंतर्दृष्टि के लिए धन्यवाद। –

9

यदि आप पीछे कोड का उपयोग नहीं करना चाहते हैं तो InactiveSelectionHighlightBrushKey का विकल्प ControlBrushKey है। निम्नलिखित मेरे लिए काम किया:

<Style x:Key="ReadOnlyDataGrid" TargetType="{x:Type DataGrid}"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightGreen"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black"/> 
    </Style.Resources> 
</Style> 
+2

वास्तव में एक विकल्प नहीं है क्योंकि यह रंग नियंत्रण की पृष्ठभूमि है और निष्क्रिय चयन नहीं है। –

+0

ControlBrushKey प्रत्येक वैकल्पिक पंक्ति के साथ-साथ पंक्ति को फोकस करने वाली पंक्ति सेट करता है। – David

+1

इससे भी बदतर, 'ControlTextBrushKey' सेटिंग पंक्तियों और कॉलम हेडर के लिए डिफ़ॉल्ट टेक्स्ट रंग भी बदलती है। इससे वास्तव में यह बहुत बेकार हो जाता है क्योंकि चयनित होने तक सभी टेक्स्ट गायब हो जाएंगे। // आपको ब्लैक जैसे कुछ ठीक करने के लिए DataGrid.Foreground को स्पष्ट रूप से सेट करने की आवश्यकता है। – ygoe

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