2008-08-13 15 views
25

के डिफ़ॉल्ट कॉन्टेक्स्टमेनू को स्टाइल या अक्षम कैसे करें जब उपयोगकर्ता हमारे डब्ल्यूपीएफ एप्लिकेशन में राइट-क्लिक करते हैं, और वे विंडोज क्लासिक थीम का उपयोग करते हैं, टेक्स्टबॉक्स के डिफ़ॉल्ट कॉन्टेक्स्टमेनू (जिसमें कॉपी, कट और पेस्ट शामिल है) एक काला पृष्ठभूमि है।डब्ल्यूपीएफ: टेक्स्टबॉक्स

मैं यह अच्छी तरह से पता है कि काम करता है:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <TextBox ContextMenu="{x:Null}"/> 

</Page> 

लेकिन यह काम नहीं करता:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<Page.Resources> 

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}"> 
    <Setter Property="ContextMenu" Value="{x:Null}"/> 
</Style> 
</Page.Resources> 

    <TextBox/> 
</Page> 

किसी WPF में सभी बक्सें के लिए शैली या निष्क्रिय करने के लिए कैसे डिफ़ॉल्ट ContextMenu पता है?

+0

आप अक्षम शॉर्टकट कुंजी है, उदा नहीं पर विचार की जरूरत है CTRL-V? –

उत्तर

7

देर से बग रिपोर्ट के कारण हमने पाया कि हम एप्लिकेशनकॉन्ड्स कट पेस्ट और सीधे आंशिक भरोसेमंद एप्लिकेशन में कॉपी नहीं कर सकते हैं।इसके लिए, इन आदेशों का उपयोग आपके नियंत्रण के किसी भी कमांड में निष्पादित होने पर बिल्कुल कुछ नहीं करेगा।

तो संक्षेप में ब्रैड का जवाब लगभग वहां था, यह निश्चित रूप से सही तरीके से देखा गया था यानी कोई काला पृष्ठभूमि नहीं, लेकिन समस्या को ठीक नहीं किया।

हम Brads उत्तर के आधार पर मेनू "को दूर करने के लिए", तो तरह का निर्णय लिया:

<ContextMenu x:Key="TextBoxContextMenu" Width="0" Height="0" /> 

और इसलिए इस तरह खाली संदर्भ मेनू का उपयोग:

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" /> 
</Style> 
+0

या आप का उपयोग कर सकते हैं, जो भी काम करता है। – joedotnot

+0

इसके अतिरिक्त, कॉन्टेक्स्टमेनू पर 'IsEnabled' को 'झूठा' पर सेट करने पर फोकस" ठंड "के मुद्दे से बचा जाता है जब उपयोगकर्ता राइट क्लिक करने का प्रयास करता है। –

1

एक्स को हटाने का प्रयास करें: स्टाइल संसाधन से मुख्य विशेषता, लक्ष्य टाइप छोड़कर। मुझे पता है, आपको लगता है कि एक्स: संसाधन के लिए कुंजी है, लेकिन यदि आपके पास अपने लक्ष्य टाइप के साथ कुंजी है तो कुंजी प्रचलित है। , - (नोटिस, कोई कुंजी इस App.Resources में है)

<Style 
    TargetType="{x:Type ToolTip}"> 
    <Setter 
     Property="Template"> 
     <Setter.Value> 
     <ControlTemplate 
      TargetType="{x:Type ToolTip}"> 
      <Grid 
      Width="{TemplateBinding Width}" 
      Height="{TemplateBinding Height}"> 
      <Rectangle 
       RadiusX="9" 
       RadiusY="9" 
       Stroke="LightGray" 
       StrokeThickness="2"> 
       <Rectangle.Fill> 
       <RadialGradientBrush> 
        <GradientStop /> 
        <GradientStop 
        Color="FloralWhite" 
        Offset="0" /> 
        <GradientStop 
        Color="Cornsilk" 
        Offset="2" /> 
       </RadialGradientBrush> 
       </Rectangle.Fill> 
      </Rectangle> 
      <ContentPresenter 
       Margin="6 4 6 4" /> 
      </Grid> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 
1

कोई फर्क नहीं पड़ता अगर

यहां एक नमूना शैली है कि मैं एक परियोजना में उपयोग अपने एप्लिकेशन में से एक में सभी टूलटिप्स त्वचा के लिए है आप एक कुंजी प्रदान नहीं करते हैं, यह कुंजी सिर्फ उसी तरह मेरे उदाहरण का उपयोग करता है :)

शैली पर MSDN से लिया के रूप में TargetType का उपयोग करेगा:

करने के लिए TargetType गुण को सेट के बिनाप्रकार x:Key सेटिंग x:Key से {x:Type TextBlock} पर सेट करता है। इसका मतलब यह भी है कि यदि आप> ऊपर दिए गए स्टाइल को x:Key{x:Type TextBlock} के अलावा किसी अन्य चीज़ का मान दें, तो स्टाइल स्वचालित रूप से सभी टेक्स्टब्लॉक तत्वों पर लागू नहीं होगा। इसके बजाय, आपको शैली को TextBlock तत्वों को स्पष्ट रूप से लागू करने की आवश्यकता है।

http://msdn.microsoft.com/en-us/library/system.windows.style.targettype.aspx

28
शैली ContextMenu के लिए सभी बक्सें के लिए

, मैं निम्नलिखित की तरह कुछ करना होगा:

पहले, संसाधन अनुभाग में, जोड़ने के एक ContextMenu जो आप में अपने मानक ContextMenu के रूप में उपयोग करने की योजना एक टेक्स्टबॉक्स
उदा।

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" /> 
</Style> 

अंत में, सामान्य तौर पर अपने पाठ बॉक्स का उपयोग:

<TextBox /> 

यदि इसके बजाय आप चाहते

<ContextMenu x:Key="TextBoxContextMenu" Background="White"> 
    <MenuItem Command="ApplicationCommands.Copy" /> 
    <MenuItem Command="ApplicationCommands.Cut" /> 
    <MenuItem Command="ApplicationCommands.Paste" /> 
</ContextMenu> 

दूसरे, अपने बक्सें के लिए एक शैली है, जो संदर्भ मेनू संसाधन का उपयोग करता है बनाने इस संदर्भ मेनू को केवल अपने कुछ टेक्स्टबॉक्स में लागू करने के लिए, उपरोक्त शैली न बनाएं, और अपने टेक्स्टबॉक्स मार्कअप में निम्न जोड़ें:

<TextBox ContextMenu="{StaticResource TextBoxContextMenu}" /> 

आशा है कि इससे मदद मिलती है!

+0

मुझे एक बग पर ठोकर खाने के लिए खेद है .. मुझे कभी एहसास नहीं हुआ, लेकिन मैं आंशिक ट्रस्ट में सीधे एप्लीकेशन कॉमांड कट, कॉपी और पेस्ट का उपयोग नहीं कर सकता .. यह मेनू आंशिक विश्वास के तहत काम नहीं करेगा। मेनू आइटम पर क्लिक करना, बिल्कुल कुछ नहीं करता .. मुझे खेद है कि इसे खोजने में लगभग 18 महीने लग गए;) – Arcturus

+0

आपका उत्तर मुझे मेरे नए समाधान में ले गया है: मेनू को खाली मेनू से अक्षम करना .. फिर भी धन्यवाद, आपके जवाब के लिए धन्यवाद! – Arcturus

14

विचित्र। ContextMenu="{x:Null}" चाल नहीं करता है।

यह करता है, लेकिन:

<TextBox.ContextMenu> 
    <ContextMenu Visibility="Collapsed"> 
    </ContextMenu> 
</TextBox.ContextMenu> 
संबंधित मुद्दे