अब तक के सभी उत्तरों में पूरी तरह से डिफ़ॉल्ट बटन व्यवहार को किसी अन्य चीज़ से बदलना शामिल है। हालाँकि, IMHO यह समझना महत्वपूर्ण और महत्वपूर्ण है कि XAML तत्व के लिए मौजूदा, डिफ़ॉल्ट टेम्पलेट को संपादित करके आपके द्वारा देखभाल किए जाने वाले हिस्से को बदलना संभव है ।
WPF बटन पर होवर के प्रभाव से निपटने के मामले में, WPF Button
तत्व में उपस्थिति में परिवर्तन, उसके Trigger
लिए डिफ़ॉल्ट शैली में होता है Button
, जो IsMouseOver
संपत्ति पर आधारित होता है और शीर्ष-स्तरीय तत्व के गुणों Background
और BorderBrush
गुणों को सेट करता है। Border
नियंत्रण टेम्पलेट में। Button
तत्व की पृष्ठभूमि के नीचे है Border
तो बदल रहा है, तत्व की पृष्ठभूमि Button.Background
संपत्ति देखे जाने से निश्चित मंडराना प्रभाव नहीं रोकता है।
कुछ प्रयास के साथ, आप अपने स्वयं के सेटर के साथ इस व्यवहार को ओवरराइड कर सकते हैं, लेकिन क्योंकि जिस तत्व को आपको प्रभावित करने की आवश्यकता है वह टेम्पलेट में है और सीधे अपने स्वयं के एक्सएएमएल में सुलभ नहीं है, यह दृष्टिकोण कठिन होगा और आईएमएचओ अति जटिल।
एक अन्य विकल्प यह होगा कि ग्राफिक का उपयोग करने Content
के Button
बजाय इसके लिए उपयोग किया जाए Background
। यदि आपको ग्राफ़िक पर अतिरिक्त सामग्री की आवश्यकता है, तो आप उन्हें Grid
सामग्री में शीर्ष-स्तरीय ऑब्जेक्ट के साथ जोड़ सकते हैं ।
हालाँकि, यदि आप शाब्दिक रूप से सिर्फ हॉवर इफ़ेक्ट को पूरी तरह से निष्क्रिय करना चाहते हैं (केवल इसे छुपाने के बजाय), तो आप Visual Studio XAMAM डिज़ाइनर का उपयोग कर सकते हैं:
- अपने XAML का संपादन करते समय, "डिज़ाइन" टैब चुनें।
- में "डिजाइन" टैब, बटन, जिसके लिए आप प्रभाव को निष्क्रिय करना चाहते हैं।
- उस बटन पर राइट-क्लिक करें, और "टेम्पलेट संपादित करें / एक कॉपी संपादित करें ..." चुनें । उस प्रॉम्प्ट में चुनें, जहां आप चाहते हैं कि नया टेम्प्लेट संसाधन रखा जाए। यह कुछ नहीं करता दिखाई देगा, लेकिन वास्तव में डिज़ाइनर ने आपके द्वारा बताए गए नए संसाधनों को जोड़ा होगा, और उन संसाधनों को बटन टेम्पलेट के रूप में उपयोग करने वाली शैली को संदर्भित करने के लिए अपने बटन तत्व को बदल दिया है।
- अब, आप उस शैली को संपादित कर सकते हैं। सबसे आसान काम को हटाने या टिप्पणी आउट करने के लिए (उदाहरण के लिए है Ctrl+ E, C)
<Trigger Property="IsMouseOver" Value="true">...</Trigger>
तत्व। बेशक, आप उस बिंदु पर इच्छित टेम्पलेट में कोई भी बदलाव कर सकते हैं।
जब आप कर लेंगे, तो बटन शैली कुछ इस तरह दिखाई देगी:
<p:Style x:Key="FocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</p:Style>
<SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/>
<SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/>
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/>
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/>
<SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/>
<SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/>
<SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/>
<SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/>
<SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/>
<p:Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<!--<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>-->
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</p:Style>
(ध्यान दें: आप p:
वास्तविक कोड में XML नाम स्थान योग्यता को छोड़ सकते हैं ... मैं उन्हें केवल इसलिए प्रदान करता हूं क्योंकि स्टैक ओवरफ्लो XML कोड फ़ॉर्मेट उन <Style/>
तत्वों द्वारा भ्रमित हो जाता है जिनके पास XML नाम स्थान के साथ पूरी तरह से योग्य नाम नहीं है।)
यदि आप उसी शैली को अन्य बटनों पर लागू करना चाहते हैं, तो आप उन्हें केवल राइट-क्लिक कर सकते हैं और "टेम्पलेट संपादित करें / संसाधन लागू करें" चुनें और पहले बटन के लिए आपके द्वारा जोड़ी गई शैली का चयन करें। आप उस शैली को सभी बटन के लिए डिफ़ॉल्ट शैली भी बना सकते हैं, XAML में तत्वों के लिए डिफ़ॉल्ट शैली लागू करने के लिए सामान्य तकनीकों का उपयोग कर सकते हैं।
Forward-48.png
और उसी के लिए इसे बदलने के लिए IsMouseOver को ट्रिगर करना होगाForward-48.png
। मैं विभिन्न चित्रों के साथ आपके कोड का उपयोग करने की कोशिश कर रहा हूं और मैंने सभी ठीक काम किया है।