मैं उन संवादों का उपयोग करके एक दृष्टिकोण लेना पसंद करता हूं जो एप्लिकेशन को लॉक नहीं करता है, और अधिक पारंपरिक Win32 संवाद से दूर चला जाता है।
उदाहरण
इनपुट संवाद हिडन
इस उदाहरण में मैं MVVM आधारित समाधान मैं अपने अनुप्रयोगों के लिए उपयोग कर रहा हूँ का एक सरलीकृत संस्करण का उपयोग करें। यह सुंदर नहीं हो सकता है, लेकिन इसके पीछे मूल बातें पर आपको ठोस विचार देना चाहिए।
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<Button Content="Cool Button" x:Name="CoolButton" Click="CoolButton_Click"/>
<ListBox x:Name="MyListBox"/>
</StackPanel>
<!-- It's important that this is in the end of the XAML as it needs to be on top of everything else! -->
<Grid x:Name="InputBox" Visibility="Collapsed">
<Grid Background="Black" Opacity="0.5"/>
<Border
MinWidth="250"
Background="Orange"
BorderBrush="Black"
BorderThickness="1"
CornerRadius="0,55,0,55"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<StackPanel>
<TextBlock Margin="5" Text="Input Box:" FontWeight="Bold" FontFamily="Cambria" />
<TextBox MinWidth="150" HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="InputTextBox"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button x:Name="YesButton" Margin="5" Content="Yes" Background="{x:Null}" Click="YesButton_Click"/>
<Button x:Name="NoButton" Margin="5" Content="No" Background="{x:Null}" Click="NoButton_Click" />
</StackPanel>
</StackPanel>
</Border>
</Grid>
</Grid>
यह इस संवाद को दिखाने के लिए के रूप में आप ही दिखाई करने के लिए InputBox
ग्रिड की दृश्यता निर्धारित करने की आवश्यकता बहुत आसान है। फिर आप बस हां/नहीं बटन को संभालते हैं और टेक्स्टबॉक्स से इनपुट टेक्स्ट प्राप्त करते हैं।
तो ShowDialog()
की आवश्यकता वाले कोड का उपयोग करने के बजाय, आप बस Visibility
विकल्प Visible
पर सेट करें। इस उदाहरण में अभी भी कुछ चीजें हैं जो हम कोड-बैक में संभाल लेंगे, उदाहरण के लिए हाँ/नहीं बटन क्लिक को संभालने के बाद इनपुट टेक्स्ट बॉक्स को साफ़ करना।
कोड-पीछे:
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void CoolButton_Click(object sender, RoutedEventArgs e)
{
// CoolButton Clicked! Let's show our InputBox.
InputBox.Visibility = System.Windows.Visibility.Visible;
}
private void YesButton_Click(object sender, RoutedEventArgs e)
{
// YesButton Clicked! Let's hide our InputBox and handle the input text.
InputBox.Visibility = System.Windows.Visibility.Collapsed;
// Do something with the Input
String input = InputTextBox.Text;
MyListBox.Items.Add(input); // Add Input to our ListBox.
// Clear InputBox.
InputTextBox.Text = String.Empty;
}
private void NoButton_Click(object sender, RoutedEventArgs e)
{
// NoButton Clicked! Let's hide our InputBox.
InputBox.Visibility = System.Windows.Visibility.Collapsed;
// Clear InputBox.
InputTextBox.Text = String.Empty;
}
}
}
कोड-पीछे आसानी से एक निर्भरता का उपयोग कर इस मामले में किया जा सकता है, या ViewModel तर्क के रूप में है, लेकिन सादगी के लिए मैं इसे में कोड-पीछे रखा।
http://social.msdn.microsoft.com/Forums/en/winforms/thread/191ddf61-3ae5-4845-b852-56bb9b77238a पर एक नज़र डालें। – mjwills