ইভেন্ট হ্যান্ডলিংয়ের জন্য কি ডাব্লুপিএফ-তে কোনও সংস্থান অভিধানের পিছনে কোড সেট করা সম্ভব?


147

ডাব্লুপিএফ-তে কোনও সংস্থান অভিধানের পিছনে কোড সেট করা সম্ভব? উদাহরণস্বরূপ কোনও বোতামের জন্য ব্যবহারকারী নিয়ন্ত্রণে আপনি এটি XAML এ ঘোষণা করেন declare বোতাম ক্লিকের জন্য ইভেন্ট হ্যান্ডলিং কোডটি নিয়ন্ত্রণের পিছনে কোড ফাইলে সম্পন্ন হয়। যদি আমি কোনও বোতামের সাহায্যে ডেটা টেম্পলেট তৈরি করতে পারি তবে কীভাবে আমি ইভেন্ট হ্যান্ডলার কোডটি লিখতে পারি এটির জন্য संसाधन অভিধানের মধ্যে ক্লিক করুন।


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

উত্তর:


209

আমি মনে করি আপনি যা জিজ্ঞাসা করছেন তা হ'ল আপনি কি কোনও রিসোর্স ডিকোরিয়ানের জন্য একটি কোড-পেছনের ফাইল চান। আপনি পুরোপুরি এটি করতে পারেন! আসলে, আপনি এটি উইন্ডোয়ের মতোই করেন:

বলুন আপনার কাছে মাইআর রিসোর্সড অভিধান নামে একটি রিসোর্সড অভিধান রয়েছে। আপনার মাইআর রিসোর্সড অভিধান.অ্যাক্যামল ফাইলটিতে, x: শ্রেণির বৈশিষ্ট্যটিকে মূল উপাদানটিতে রেখে দিন:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    x:Class="MyCompany.MyProject.MyResourceDictionary"
                    x:ClassModifier="public">

তারপরে, নিম্নলিখিত ঘোষণার সাহায্যে ফাইলের পিছনে একটি কোড তৈরি করুন MyResourceD অভিধান.xaml.cs:

namespace MyCompany.MyProject
{
    partial class MyResourceDictionary : ResourceDictionary
    { 
       public MyResourceDictionary()
       {
          InitializeComponent();
       }     
       ... // event handlers ahead..
    }
}

এবং তুমি করে ফেলেছ. কোডটিতে আপনি যা ইচ্ছে তার পিছনে রাখতে পারেন: পদ্ধতি, বৈশিষ্ট্য এবং ইভেন্ট হ্যান্ডলার।

== উইন্ডোজ 10 অ্যাপ্লিকেশনগুলির জন্য আপডেট ==

এবং আপনি যদি ইউডাব্লুপি দিয়ে খেলছেন তবে সচেতন হওয়ার জন্য আরও একটি বিষয় রয়েছে:

<Application x:Class="SampleProject.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:rd="using:MyCompany.MyProject">
<!-- no need in x:ClassModifier="public" in the header above -->

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>

                <!-- This will NOT work -->
                <!-- <ResourceDictionary Source="/MyResourceDictionary.xaml" />-->

                <!-- Create instance of your custom dictionary instead of the above source reference -->
                <rd:MyResourceDictionary />

            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>

7
এজেক্র্যাপড জবাবের সংযোজন হিসাবে: নিশ্চিত হয়ে নিন যে আপনি আপনার কোডবিহাইন্ড ক্লাসের পুরোপুরি যোগ্যতাসম্পন্ন নামটি x: শ্রেণির বৈশিষ্ট্যে রেখেছেন। x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary"অন্যথায়, আপনি যদি কেবল x: ক্লাস = "মাইআর রিসোর্সড অভিধান" রাখেন, xaml পার্সার আপনার ক্লাসটি খুঁজে পাবে না।
স্নিগ্ধতা

29
আংশিক শ্রেণীর কোডবিহীন অংশে আপনি একটি ডিফল্ট কনস্ট্রাক্টর সরবরাহ করেছেন কিনা তা নিশ্চিত করুন এবং নিশ্চিত করুন যে এটি আঞ্চলিক সংযোগ () বলে calls (আমার ক্ষেত্রে আমি রিসোর্স অভিধানটি রফতানি করার জন্য এমইএফ ব্যবহার করছিলাম))
স্কট হুইটলক

4
Upvated মন্তব্য জন্য আপডেট কোড স্নিপেট। আমি অনুভব করেছি উত্তরটি সম্পূর্ণ করা দরকার ছিল; একটি সাধারণ ভুল আমি এখনই এটি করেছি :) আপনি যদি এটি পছন্দ না করেন তবে ফিরে যান। উত্তর করার জন্য ধন্যবাদ.
গিশু

2
নোট করুন (কমপক্ষে wp8.1 এ) এটি আর বৈধ নয় এবং আপনাকে এমন একটি কাস্টম ব্যবহারকারী নিয়ন্ত্রণ তৈরি করতে হবে যা আপনার রিসোর্সোরিও অভিধানটি উল্লেখ করেছে
জারেড

9
আপনাকে রিসোর্সড অভিধানের এক্সএএমএল ফাইলটিতে বিল্ড অ্যাকশনটি "পৃষ্ঠা" তে সেট করতে হবে, অন্যথায় আর্নিজাইজ কম্পোনেন্ট () কলটি সংকলন করবে না। (
রিসোর্সড অভিধান অভিধান

9

আমি "এজেক্র্যাপড" এর সাথে একমত নই ... আংশিক শ্রেণির পদ্ধতি ব্যবহার করা ভাল অভ্যাস নয়। অভিধানটি তখন পৃষ্ঠা থেকে আলাদা করার উদ্দেশ্য কী হবে?

একটি কোড-পিছনে থেকে, আপনি কুড়াল অ্যাক্সেস করতে পারেন: নাম উপাদান ব্যবহার করে:

Button myButton = this.GetTemplateChild("ButtonName") as Button;
if(myButton != null){
   ...
}

আপনি কি করতে পারেন এই যদি আপনি নিয়ন্ত্রণ যখন আপনার কাস্টম নিয়ন্ত্রণ লোড করা hookup জন্য চান OnApplyTemplate পদ্ধতিতে। এটি করার জন্য অন্যাপলিটাইম্পলেটকে ওভাররাইড করা দরকার। এটি একটি সাধারণ অনুশীলন এবং আপনার স্টাইল নিয়ন্ত্রণ থেকে সংযোগ বিচ্ছিন্ন থাকার অনুমতি দেয়। (শৈলীর উপর নিয়ন্ত্রণের উপর নির্ভর করা উচিত নয়, তবে নিয়ন্ত্রণটি স্টাইল থাকার উপর নির্ভর করে)।


7
ফোবিস আমি মনে করি অভিধান থেকে পৃষ্ঠাটি আলাদা করার উদ্দেশ্যটি মূল পৃষ্ঠার এক্সএএমএল এর পুনঃব্যবহারযোগ্যতা এবং পঠনযোগ্যতা সম্পর্কে। উপরের সমাধানটি আমার পক্ষেও কাজ করেছিল।
ক্লেফেরিস 16

5

গিশু - যদিও এটি একটি "সাধারণত উত্সাহিত না হওয়ার অনুশীলন বলে মনে হতে পারে" আপনি এখানে এটি করতে চান এমন একটি কারণ এখানে:

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

অন্য কোনও কারণে যেখানে আপনি ডিফল্ট ব্যবহারকারীর ইন্টারঅ্যাকশন আচরণটি বক্স আচরণের চেয়ে আলাদা হওয়া চাইছেন মনে হয় কোনও উত্স অভিধানে কোনও কোডের পিছনে ভাল প্রার্থীদের মতো।

সম্পূর্ণরূপে সম্মত হন যে অ্যাপ্লিকেশন কার্যকারিতা সুনির্দিষ্ট যে কোনও কিছু উত্স অভিধানের পেছনের কোডে থাকা উচিত নয়।


0

এক্সএএমএল কোডবিহীন অবজেক্ট গ্রাফগুলি তৈরির জন্য।
কোনও কাস্টম ব্যবহারকারী-অবজেক্টটি কীভাবে স্ক্রিনে রেন্ডার করা হয় তা নির্দেশ করতে একটি ডেটা টেমপ্লেট ব্যবহার করা হয় ... (উদাহরণস্বরূপ এটি যদি একটি তালিকা বাক্স আইটেম হয়) আচরণ কোনও ডেটা টেমপ্লেটের দক্ষতার ক্ষেত্রের অংশ নয়। সমাধান পুনরায় আঁকুন ...


উপসংহার: আপনি কি পিছনে কোড সহ রিসোর্স ডিক ব্যবহার করার পরামর্শ দিবেন নাকি ?? আমি এটি কখনও ব্যবহার করি নি, আমি সন্দেহ করছি।
শিমি ওয়েইজস্যান্ডলার

1
আমি করব না - আমার কাছে এটি সঠিক মনে হচ্ছে না। একটি অভিধানে নির্দিষ্ট কীগুলির জন্য মানগুলি ফেরত দেওয়া উচিত। ওপির ক্ষেত্রে, ডেটা টেমপ্লেট সহ বান্ডিলিং কোড .. আমি বরং ভিন্ন পদ্ধতির চেষ্টা করব .. উদাহরণস্বরূপ কমান্ড মডেলটি ব্যবহার করুন। ডিফ সলন প্রস্তাব দেওয়ার জন্য আমার ওপি-র সমস্যা সম্পর্কে আরও বিশদ প্রয়োজন।
গিশু

1
সম্পূর্ণ অসমত। এমভিভিএম সহ, এমন একটি দৃশ্য রয়েছে যেখানে পেছনের কোড থাকা অত্যন্ত দরকারী: সংযুক্ত বৈশিষ্ট্য বিকাশ করা। পিছনে কোড সহ এটি কাজ করুন, তারপরে এটি সংযুক্ত সম্পত্তিতে পোর্ট করুন। এটি স্ক্র্যাচ থেকে কেবল সংযুক্ত সম্পত্তি বিকাশের চেয়ে অনেক দ্রুত, যদি না আপনার মস্তিষ্ক ম্যানহাটনের আকার থাকে।
কনটাঙ্গো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.