2010-08-13 17 views
37

पर एक बटन का पृष्ठभूमि रंग बदलें यह वास्तव में, वास्तव में सरल समस्या की तरह लगता है, लेकिन मैं इसे समझ नहीं सकता। अपराधी WP7 की डिफ़ॉल्ट शैली प्रतीत होता है। बटन क्लिक होने पर यह पृष्ठभूमि रंग को सफेद में बदल देता है, फिर बटन की डिफ़ॉल्ट पृष्ठभूमि पर वापस आ जाता है।विंडोज फोन 7 (WP7)

मेरी समस्या यह है कि बटन क्लिक होने पर मैं बटन की पृष्ठभूमि को बदलना चाहता हूं। मुझे ऐसा करने का कोई संभावित तरीका नहीं मिल रहा है।

मैंने कोड में पृष्ठभूमि सेट करने का प्रयास किया है, लेकिन यह कुछ भी नहीं करता है। मुझे लगता है कि इसे डिफ़ॉल्ट शैली से ओवरराइट किया जा रहा है।

मैंने ब्लेंड में एक संपत्ति परिवर्तन व्यवहार का उपयोग करने का प्रयास किया है, लेकिन इसका सटीक परिणाम भी है।

मैंने बटन के लिए एक नया दृश्य स्थिति बनाने और क्लिक करने की सेटिंग करने का प्रयास किया है, लेकिन यह थोड़ी छोटी गाड़ी है और मेरे द्वारा काम किए जा रहे बटनों की संख्या के लिए एक बड़ा ओवरहेड है। इसके अलावा, यह काम नहीं किया।

मैं एक क्लिक ईवेंट पर अन्य बटन की पृष्ठभूमि सेट कर सकता हूं, बस क्लिक नहीं किया जा रहा बटन।

यह एक कष्टप्रद रोडब्लॉक है! मुझे यकीन है कि यह कोड की एक तरह की उत्तर है। :)

+3

मुझे एक ही समस्या है, मैं बस इसे पारदर्शी बनाना चाहता हूं, क्योंकि मैं पृष्ठभूमि के रूप में एक छवि का उपयोग कर रहा हूं। हालांकि, जब बटन क्लिक किया जाता है तो मैं कोई पृष्ठभूमि रंग नहीं लेना चाहता क्योंकि मैं एक बटन पृष्ठभूमि बटन के रूप में उपयोग करता हूं। मैं यह कैसे कर सकता हूं? :) –

+0

भी: http: //blogs.msdn।com/b/ptorr/archive/2010/06/18/क्यों-can-ti-change-the-background-of-my-button-on-a-click-event.aspx? टिप्पणी पोस्ट किया गया = true # commentmessage – mlvljr

उत्तर

47

आपको एक बटन टेम्पलेट बनाना है जो दबाए गए दृश्य स्थिति को संशोधित करता है।

मिश्रण में, अपना बटन चुनें, मेनू आइटम "ऑब्जेक्ट" -> "टेम्पलेट संपादित करें" -> "कॉपी संपादित करें ..." पर क्लिक करें और एक नया टेम्पलेट बनाया गया है। राज्य विंडो में, कॉमनस्टेट दृश्य स्थिति समूह में दबाए गए दृश्य स्थिति का चयन करें। अब ऑब्जेक्ट पदानुक्रम में बटनबैकग्राउंड का चयन करें और गुण विंडो में पृष्ठभूमि ब्रश संपादित करें।

मैंने दबाए गए राज्य की पृष्ठभूमि को ठोस सियान-आश रंग के रूप में संपादित किया और इस एक्सएएमएल की तरह कुछ खत्म हो गया।

<phone:PhoneApplicationPage ...> 
    <phone:PhoneApplicationPage.Resources> 
     <Style x:Key="ButtonStyle1" TargetType="Button"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Grid Background="Transparent"> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="MouseOver"/> 
            <VisualState x:Name="Pressed"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ColorAnimation Duration="0" To="Cyan" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}" Background="Black"> 
           <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </phone:PhoneApplicationPage.Resources> 

    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Button Content="Button" Style="{StaticResource ButtonStyle1}"/> 
    </Grid> 
</phone:PhoneApplicationPage> 
+1

उसने ऐसा किया यह। जब मैं शैली को संपादित करने के लिए चुना गया तो मुझे पता नहीं चला कि डिफ़ॉल्ट राज्य क्यों गायब थे। चाल टेम्पलेट का उपयोग करना था। उसके लिए धन्यवाद! Unstuck। वाह। – Jason

+1

यह पृष्ठभूमि रंग के लिए वास्तव में अच्छी तरह से काम करता है। मैं यह समझने की कोशिश कर रहा हूं कि सीमावर्ती और अग्रभूमि को सेट करने के लिए इसे कैसे विस्तारित किया जाए। कोई विचार? मैं जिस कोड को डालने का प्रयास करता हूं वह काम नहीं करता है (या खराब परिणाम देता है) – pearcewg

+0

@pearcewg +1 - मैं ऐसा करने की कोशिश कर रहा हूं, लेकिन यह पता नहीं लगा सकता कि कौन सी संपत्ति बदलनी है। – ehdv

1

मुझे लगता है कि वास्तविक पृष्ठभूमि का संदर्भ प्राप्त करना, फिर बदलना इससे मदद मिल सकता है। यहां एक विधि है जो एक उदाहरण एक बटन ले जाएगा।

 private void HighlightButton(Button btnToHighlight) 
     { 

      SolidColorBrush sBrush = (SolidColorBrush)btnToHighlight.Background; 


      sBrush.Color = //enter your colour here 
      btnToHighlight.Background = sBrush; 

     } 
0
<ControlTemplate x:Key="ButtonNextOver" TargetType="Button"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00" Storyboard.TargetProperty="Background" Storyboard.TargetName="hoverbutton"> 
             <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
              <DiscreteObjectKeyFrame.Value> 
               <ImageBrush ImageSource="/NhomMua;component/Image/ico_next_over.png"/> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="FocusStates"> 
          <VisualState x:Name="Focused"/> 
          <VisualState x:Name="Unfocused"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Border x:Name="hoverbutton"> 
         <Border.Background> 
          <ImageBrush ImageSource="/NhomMua;component/Image/ico_next.png"/> 
         </Border.Background> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
0

बटन पृष्ठभूमि को बदलने के लिए जब बटन दबाया जाता है, मैं टेम्पलेट का उपयोग। जैसा कि मैट ने इंगित किया है, प्रोजेक्ट को ब्लेंड में खोलें। बटन पर जाएं> राइट क्लिक> टेम्पलेट संपादित करें> एक ​​प्रति संपादित करें। आपके बटन के लिए एक नया टेम्पलेट बनाया जाएगा और आपके एक्सएएमएल पेज की नज़दीकी शुरुआत में जोड़ा जाएगा।

अब जब बटन दबाए जाने पर आपको बटन व्यवहार को बदलने की आवश्यकता है, तो आपको VisualState को बदलने की आवश्यकता है। "दबाए गए" दृश्य स्थिति और इसमें सहकर्मी के लिए सिर। यह "दबाया गया" दृश्य राज्य है।

<VisualState x:Name="Pressed"> 
<Storyboard> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> 
      <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}"/> 
     </ObjectAnimationUsingKeyFrames> 
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
     <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/> 
     </ObjectAnimationUsingKeyFrames> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ButtonBackground" Storyboard.TargetProperty="BorderBrush"> 
      <DiscreteObjectKeyFrame KeyTime="0" Value="#FF373737" /> 
     </ObjectAnimationUsingKeyFrames> 
</Storyboard> 

बदलें कुछ भी आप की इच्छा के लिए # FF373737 का मूल्य। अब आप सेट हैं

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