ডাব্লুপিএফ-এ কীভাবে মডেল ডায়ালগ করবেন?


133

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

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


আমার উত্তরটি এখানে ভাগ করা যেহেতু এটি হয়ত গুগল থেকে এখানে ঘুরতে সাহায্য করে।
শাহিন দোহান

উত্তর:


222

আপনি কি শোডায়ালগ পদ্ধতিটি ব্যবহার করে আপনার উইন্ডোটি দেখানোর চেষ্টা করেছেন ?

ডায়লগ উইন্ডোতে মালিকের সম্পত্তিটি মূল উইন্ডোতে সেট করতে ভুলবেন না । এটি Alt + ট্যাবিং ইত্যাদির সময় অদ্ভুত আচরণ এড়াবে


43

এই উত্তরগুলির অনেকগুলি সরলতাযুক্ত এবং যদি কেউ ডাব্লুপিএফ শুরু করে তবে তারা "ইনস-আউট আউটস" সমস্তই জানেন না, কারণ এটি কাউকে কেবল "ব্যবহার করুন .ShowDialog()!" বলার চেয়ে জটিল complicated তবে সেই পদ্ধতিটি (নয় .Show()) যা আপনি অন্তর্নিহিত উইন্ডোটির ব্যবহার অবরুদ্ধ করতে এবং মডেল উইন্ডোটি বন্ধ না হওয়া অবধি কোডটি চালিয়ে যাওয়া থেকে চালিয়ে যেতে চান।

প্রথমত, আপনার জন্য 2 ডাব্লুপিএফ উইন্ডো দরকার। (একজন অন্যজনকে ডাকবে।)

প্রথম উইন্ডো থেকে, যাক যাকে বলা হয় মেইনউইন্ডো.এক্স্যামেল, এর কোড-পিছনে থাকবে:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

তারপরে আপনার এক্সএএমএলে আপনার বোতামটি যুক্ত করুন:

<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />

এবং Clickরুটিনটি ডান ক্লিক করুন , "সংজ্ঞাতে যান" নির্বাচন করুন। এটি এটিকে মেইনওয়াইন্ডো.এক্স্যামল সিটিতে তৈরি করবে:

private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}

এই ফাংশনটির মধ্যে, আপনাকে অন্য পৃষ্ঠার পৃষ্ঠা বর্গটি ব্যবহার করে নির্দিষ্ট করতে হবে। বলুন যে আপনি সেই অন্য পৃষ্ঠার নাম রেখেছেন "মোডাল উইন্ডো", যাতে এটি এর পৃষ্ঠা শ্রেণিতে পরিণত হয় এবং আপনি কীভাবে এটি ইনস্ট্যান্ট করবেন (কল করবেন):

private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
    ModalWindow modalWindow = new ModalWindow();
    modalWindow.ShowDialog();
}

বলুন যে আপনার মডেল ডায়ালগটি সেট করতে আপনার একটি মান দরকার need ModalWindowএক্সএএমএলে একটি পাঠ্যবক্স এবং একটি বোতাম তৈরি করুন :

<StackPanel Orientation="Horizontal">
    <TextBox Name="txtSomeBox" />
    <Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" /> 
</StackPanel>

তারপরে Clickআবার একটি ইভেন্ট হ্যান্ডলার (অন্য ইভেন্ট) তৈরি করুন এবং পাঠ্যবাক্সের মানটি একটি সার্বজনীন স্থিতিশীল ভেরিয়েবলের ModalWindowও কল এ সংরক্ষণ করতে এটি ব্যবহার করুন this.Close()

public partial class ModalWindow : Window
{
    public static string myValue = String.Empty;        
    public ModalWindow()
    {
        InitializeComponent();
    }

    private void btnSaveData_Click(object sender, RoutedEventArgs e)
    {
        myValue = txtSomeBox.Text;
        this.Close();
    }
}

তারপরে, আপনার .ShowDialog()বক্তব্যের পরে , আপনি সেই মানটি ধরে নিতে এবং এটি ব্যবহার করতে পারেন:

private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
    ModalWindow modalWindow = new ModalWindow();
    modalWindow.ShowDialog();

    string valueFromModalTextBox = ModalWindow.myValue;
}

29

উইন্ডো.শো উইন্ডোটি উইন্ডোটি প্রদর্শন করবে এবং সম্পাদন চালিয়ে যাবে - এটি একটি অ-ব্লকিং কল।

উইন্ডো.শোডায়ালগ কলিং থ্রেডটি ব্লক করবে (কিন্ডার [1]), এবং কথোপকথনটি প্রদর্শন করবে। এটি পিতা-মাতার / মালিকানার উইন্ডোর সাথে ইন্টারঅ্যাকশনকেও ব্লক করবে। কথোপকথনটি খারিজ হয়ে গেলে (যে কারণে যাই হোক না কেন) শোডায়ালগ কলারে ফিরে আসবে এবং আপনাকে ডায়ালগআরসাল্ট অ্যাক্সেস করার অনুমতি দেবে (যদি আপনি এটি চান))

[1] এটি ডাব্লুপিএফ ডিপ্যাচারের উপর একটি প্রেরণকারী ফ্রেমকে চাপ দিয়ে প্রেরণকারীকে পাম্পিং করবে। এটি বার্তা পাম্পকে পাম্প করতে থাকবে।


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

2

উইন্ডো অবজেক্টটি মাই উইন্ডো দেওয়া হয়েছে, মাই উইন্ডো। শো () এটিকে নিরবচ্ছিন্নভাবে খুলবে এবং মাই উইন্ডো h শো ডায়ালগ () এটিকে Modally খুলবে। যাইহোক, এমনকি আধুনিকগুলিও অবরুদ্ধ হয় না, যা আমার মনে পড়ে।


6
আমি বিশ্বাস করি এটি অবরুদ্ধ। MyWindow এর পরে কোড। MyWindow ক্লোজ () কল না করা পর্যন্ত শো () কার্যকর করা হচ্ছে না।
অ্যালেক্স বারানোস্কি

আপনি এবং @ অ্যালেক্সবারানোস্কি উভয়ই সঠিক: মডেলটি ShowDialogবন্ধ না হওয়া পর্যন্ত ফিরে আসে না, সুতরাং এটি বর্তমানে সম্পাদনকারী প্রেরণকারী অপারেশনটিকে অবরুদ্ধ করে। তবে ShowDialogনিজেই কার্যকরভাবে কল করে Dispatcher.Run(), তাই প্রেরণকারী কার্যকরভাবে ইউআইকে প্রতিক্রিয়াশীল রেখে ক্রিয়াকলাপ চালিয়ে যায়।
ম্যাট থমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.