ডাব্লুপিএফ বোতামের ডিফল্ট মাউস-ওভার প্রভাব কীভাবে সরিয়ে ফেলবেন?


87

আমার সমস্যাটি হ'ল ডাব্লুপিএফ-তে, যখনই আমি ট্রিগার বা অ্যানিমেশন ব্যবহার করে কোনও বোতামের পটভূমির রঙটি চেষ্টা করি এবং পরিবর্তন করি, তখন ডিফল্ট মাউসওভার ইফেক্টটি (সেই কমলা রঙের আভাযুক্ত ধূসর হওয়ার কারণে) অগ্রাধিকার নিয়ে থাকে বলে মনে হয়।

ব্যাপক অনুসন্ধানের পরে আমি কীভাবে এই প্রভাবটি সরিয়ে ফেলতে পারি তা সম্পর্কে নির্বোধ।

উত্তর:


17

সমস্ত রাজ্যে উপস্থিতির উপর সম্পূর্ণ নিয়ন্ত্রণ রাখতে আপনাকে নিজের কাস্টম বোতাম টেম্পলেট তৈরি করতে হবে। এখানে একটি টিউটোরিয়াল


4
ধন্যবাদ, এটি নিখুঁত ছিল। এটি করার চেয়ে এটি করা আরও জটিল ছিল, তবে এটি এখন ভালভাবে কাজ করে।
নেলিয়াস

19
কোনও কারণে ডাব্লুপিএফ নিয়ন্ত্রণগুলির জন্য কাস্টম টেম্পলেট তৈরি করার 100 টি উত্তর রয়েছে এবং সেগুলি অযথা ভুল। 1 টি জিনিস পরিবর্তন করার জন্য কোনও বোতামের জন্য 50 টি লাইনের টেম্পলেট কোড লেখার জন্য সংগ্রাম করার কোনও কারণ নেই। আপনাকে যা করতে হবে তা হল এক্সএএমএল ডিজাইনারের ডানদিকে নিয়ন্ত্রণ ক্লিক করুন এবং টেম্পলেট কোডটির একটি অনুলিপি তৈরি করুন। ভিএস সেই সঠিক বোতামটি থেকে একটি শৈলী তৈরি করবে এবং আপনি সেখান থেকে এটি টুইট করতে পারেন। আক্ষরিক 2 সেকেন্ড লাগে।
মাফিন ম্যান

@ দ্য মফিনম্যান ফ্যান্টাস্টিক, তবে আপনি কি এটিকে খানিকটা আশ্চর্যজনক মনে করেন যে মাউস হোভারের পটভূমির রঙ পরিবর্তন করতে কোনও বোতাম থামাতে 50 টেমপ্লেট কোড লাগবে? জটিল কাঠামোর চেয়ে বোকামি কি WPF।
অ্যাশ

@Ash অথবা এক তর্ক হতে পারে এটা তাঁরা ব্যবহারকারী পথনির্দেশক এর উচিত যাচ্ছেন। আপনার যদি একটি বাটন থাকে যাতে একটি নতুন হোভার স্টেটের প্রয়োজন হয়, এটি সম্ভবত বোতামের একটি নতুন টিওয়াইপি; সম্ভবত একটি নেভিগেশন বোতাম, একটি ট্রে বোতাম, ইত্যাদি যদি তাই হয় তবে এর জন্য আপনার এক-অফ বৈশিষ্ট্যগুলি পরিবর্তন করা উচিত নয়, এটির নিজস্ব নিয়ন্ত্রণ বা শৈলীর গোষ্ঠী থাকা উচিত। এবং এটি আপনাকে যা করতে দেয় তা এই জাতীয়।
ম্যাট কেনেফিক

@ দ্য মফিনম্যান: আপনি সত্যই মানুষ! ডাব্লুপিএফের সাথে কাজ করার 10 বছর এবং সবেমাত্র "সম্পাদনা টেম্পলেট" বিকল্পটি সম্পর্কে জানতে পেরেছি!
পল

109

এটি মার্ক হিথ দ্বারা উল্লিখিত সমাধানের অনুরূপ তবে অ্যানিমেশন প্রভাবের মধ্যে অন্তর্নির্মিত মাউস ছাড়াই কেবল খুব বেসিক বোতামটি তৈরি করার মতো কোড নয়। এটি কালো রঙের বোতামের সীমানা দেখানোর ফলে একটি সাধারণ মাউস সংরক্ষণ করে।

স্টাইলটি উইন্ডোতে beোকানো যেতে পারে es উত্সগুলি বা ব্যবহারকারীর নিয়ন্ত্রণ। রিসোর্স বিভাগে (উদাহরণস্বরূপ)।

<UserControl.Resources>
    <!-- This style is used for buttons, to remove the WPF default 'animated' mouse over effect -->
    <Style x:Key="MyButtonStyle" TargetType="Button">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Margin" Value="5"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="border" 
                        BorderThickness="1"
                        Padding="4,2" 
                        BorderBrush="DarkGray" 
                        CornerRadius="3" 
                        Background="{TemplateBinding Background}">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="border" Property="BorderBrush" Value="Black" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>

<!-- usage in xaml -->
<Button Style="{StaticResource MyButtonStyle}">Hello!</Button>

4
আমি সেই সমাধানটি অনেক পছন্দ করি। যাইহোক, মাউস ওভার ট্রিগারগুলি কেবল তখনই সক্রিয় হয় যখন মাউসটি বোতামের পাঠ্যের উপরে চলে যায়। এই সমস্যাটি সমাধান করতে আমি বোতামের অভ্যন্তরে একটি নির্দিষ্ট প্রস্থ সহ একটি পাঠ্যরূপ যুক্ত করেছি।
ডেভ

আপনি স্যার একটি সাধু।
krobelusmeetsyndra

26

কেবল একটি খুব সহজ সমাধান যুক্ত করতে, এটি আমার পক্ষে যথেষ্ট ভাল ছিল এবং আমি মনে করি ওপি'র সমস্যাটিকে সম্বোধন করে। আমি এই উত্তরে সমাধানটি Backgroundকোনও চিত্রের পরিবর্তে নিয়মিত মান ব্যতীত ব্যবহার করেছি ।

<Style x:Key="SomeButtonStyle" TargetType="Button">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

টেম্প্লেটেড বোতাম থেকে Backgroundসর্বদা Transparentপটভূমি হতে বাধ্য করার বাইরে পুনরায় টেম্প্লেটিং করা হবে না - মাউসওভার এটি হয়ে যাওয়ার পরে পটভূমিকে আর প্রভাবিত করে না। স্পষ্টত যে Transparentকোনও পছন্দসই মান দিয়ে প্রতিস্থাপন করুন ।


11

মাফিন ম্যানের খুব সাধারণ উত্তর ছিল যা আমার পক্ষে কাজ করেছিল।

আরও কিছু সুনির্দিষ্ট দিক জুড়তে, কমপক্ষে ভিএস 2013 এর জন্য:

  • নিয়ন্ত্রণটিতে ডান-ক্লিক করুন
  • সম্পাদনা টেম্পলেট নির্বাচন করুন => একটি অনুলিপি সম্পাদনা করুন ...
  • শৈলীটি কোথায় সংরক্ষণ করতে হবে তার জন্য আমি 'অ্যাপ্লিকেশন' নির্বাচন করেছি
    • এখান থেকে আপনি সরাসরি App.xaml সম্পাদনা করতে পারবেন এবং স্বজ্ঞাত নামযুক্ত বৈশিষ্ট্যগুলি দেখতে পারবেন। আমার উদ্দেশ্যে, আমি স্রেফ রেন্ডারমাউসওভার = "মিথ্যা" সেট করেছি
  • তারপরে, মেইনওয়াইন্ডো.এক্স্যামল বা আপনার জিইউআই যেখানেই আছে, আপনি বোতাম ট্যাগের শেষে নতুন স্টাইলটি পেস্ট করতে পারেন, যেমন ... Style="{DynamicResource MouseOverNonDefault}"/>

মাফিন ম্যান কে?
মাইক ডব্লিউ

হাঃ হাঃ হাঃ. প্রশ্ন-মালিক-গৃহীত উত্তরের দ্বিতীয় উত্তরটি তিনি দিয়েছিলেন। আপনি সিরিয়াসলি জিজ্ঞাসা করছেন বা রসিকতা করছেন কিনা তা নিশ্চিত ছিল না। মাফিন ম্যানের মতো নামের সাথে বলা মুশকিল।
বেনজি-ম্যান

6

এই লিঙ্কটি আমাকে অনেক সাহায্য করেছিল http://www.codescratcher.com/wpf/remove-default-mouse-over-effect-on-wpf-buttons/

ইউজারকন্ট্রোল.সম্পদ বা উইন্ডো.সোর্সগুলিতে একটি শৈলীর সংজ্ঞা দিন

 <Window.Resources>
        <Style x:Key="MyButton" TargetType="Button">
            <Setter Property="OverridesDefaultStyle" Value="True" />
            <Setter Property="Cursor" Value="Hand" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Name="border" BorderThickness="0" BorderBrush="Black" Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Opacity" Value="0.8" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

তারপরে আপনার বোতামে এভাবে শৈলী যুক্ত করুন স্টাইল = "{স্ট্যাটিক রিসোর্স মাইবাটন}"

<Button Name="btnSecond" Width="350" Height="120" Margin="15" Style="{StaticResource MyButton}">
    <Button.Background>
        <ImageBrush ImageSource="/Remove_Default_Button_Effect;component/Images/WithStyle.jpg"></ImageBrush>
    </Button.Background>
</Button>

4

যদি কেউ ডিফল্ট কন্ট্রোল টেম্পলেটটিকে ওভাররাইড করতে না চান তবে সমাধানটি এখানে।

আপনি বোতামের জন্য ডেটা টেম্প্লেট তৈরি করতে পারেন যা টেক্সটব্লক থাকতে পারে এবং তারপরে আপনি প্রভাবকে ছাড়িয়ে মাউস অক্ষম করতে ইসমাউস ওভার সম্পত্তিতে সম্পত্তি ট্রিগার লিখতে পারেন। টেক্সটব্লক এবং বোতামের উচ্চতা একই হওয়া উচিত।

<Button Background="Black" Margin="0" Padding="0" BorderThickness="0" Cursor="Hand" Height="20">
    <Button.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="GO" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" TextDecorations="Underline" Margin="0" Padding="0" Height="20">
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Style.Triggers>
                            <Trigger Property ="IsMouseOver" Value="True">
                                <Setter Property= "Background" Value="Black"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </Button.ContentTemplate>
</Button>

1

ডজি_কোডার এর উত্তরের জন্য একটি এক্সটেনশন যা সমর্থন যোগ করে ..

  • ডাব্লুপিএফ বোতামের স্টাইল বজায় রাখা
  • আইসলেক্টেড এবং হোভারের জন্য সমর্থন যোগ করে, অর্থাত্ একটি টগলড বোতাম

        <Style x:Key="Button.Hoverless" TargetType="{x:Type ButtonBase}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ButtonBase}">
                        <Border Name="border"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Padding="{TemplateBinding Padding}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                        </Border>
                        <ControlTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="True" />
                                    <Condition Property="Selector.IsSelected" Value="False" />
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" Value="#FFBEE6FD" />
                            </MultiTrigger>
    
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="True" />
                                    <Condition Property="Selector.IsSelected" Value="True" />
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" Value="#BB90EE90" />
                            </MultiTrigger>
    
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="False" />
                                    <Condition Property="Selector.IsSelected" Value="True" />
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" Value="LightGreen" />
                            </MultiTrigger>
    
                            <Trigger Property="IsPressed" Value="True">
                                <Setter TargetName="border" Property="Opacity" Value="0.95" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    

উদাহরণ ..

<Button Content="Wipe On" Selector.IsSelected="True" /> <Button Content="Wipe Off" Selector.IsSelected="False" />


0

একটি টেম্পলেট ট্রিগার ব্যবহার:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="White"></Setter>
    ...
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="White"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.