Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windows Presentation Foundation (WPF) lehetővé teszi saját párbeszédpanelek tervezését. A párbeszédpanelek ablakok, de meghatározott szándékkal és felhasználói felülettel rendelkeznek. Ez a cikk bemutatja, hogyan működik egy párbeszédpanel, és milyen típusú párbeszédpaneleket hozhat létre és használhat. A párbeszédpanelek a következőkre használhatók:
- Adott információk megjelenítése a felhasználók számára.
- Információk gyűjtése a felhasználóktól.
- Az információt mind megjelenítik, mind gyűjtik.
- Megjeleníthet egy operációsrendszer-parancssort, például a nyomtatási ablakot.
- Válasszon ki egy fájlt vagy mappát.
Az ilyen típusú ablakokat párbeszédpaneleknek nevezzük. A párbeszédpanel kétféleképpen jeleníthető meg: modális és nem modális.
Egy modális párbeszédpanel megjelenítése a felhasználó számára egy olyan technika, amellyel az alkalmazás megszakítja a műveletét, amíg a felhasználó be nem zárja a párbeszédpanelt. Ez általában parancssor vagy riasztás formájában jelenik meg. Az alkalmazás többi ablaka csak akkor használható, ha bezárja a párbeszédpanelt. Miután bezárta a modális párbeszédpanelt, az alkalmazás folytatódik. A leggyakoribb párbeszédpanelek egy megnyitott fájl megjelenítésére vagy fájl mentésére, a nyomtató párbeszédpanel megjelenítésére vagy a felhasználó valamilyen állapotú üzenetküldésére szolgálnak.
A modell nélküli párbeszédpanel nem akadályozza meg, hogy a felhasználó más ablakokat aktiváljon, amíg nyitva van. Ha például egy felhasználó egy adott szó előfordulásait szeretné megtalálni egy dokumentumban, a főablak gyakran megnyit egy párbeszédpanelt, hogy megkérdezze a felhasználótól, hogy milyen szót keres. Mivel az alkalmazás nem szeretné megakadályozni, hogy a felhasználó szerkessze a dokumentumot, a párbeszédpanelnek nem kell modálisnak lennie. Egy nem modális párbeszédpanel legalább egy Bezárás gombot biztosít a párbeszédpanel bezárásához. Más gombok is használhatók bizonyos függvények futtatásához, például egy Következő keresése gombot, hogy megkeresse a következő szót egy szókeresésben.
A WPF használatával többféle párbeszédpanelt is létrehozhat, például üzenetdobozokat, gyakori párbeszédpaneleket és egyéni párbeszédpaneleket. Ez a cikk mindegyiket ismerteti, és a párbeszédpanel minta egyező példákat tartalmaz.
Üzenetmezők
Az üzenetmező egy párbeszédpanel, amely szöveges információk megjelenítésére és a felhasználók gombokkal történő döntéshozatalára használható. Az alábbi ábrán egy olyan üzenetmező látható, amely kérdést tesz fel, és három gombot biztosít a felhasználónak a kérdés megválaszolásához.
Üzenetmező létrehozásához használja a MessageBox osztályt. MessageBox lehetővé teszi az üzenetmező szövegének, címének, ikonjának és gombjainak konfigurálását.
További információ: Üzenetmező megnyitása.
Gyakori párbeszédpanelek
A Windows különböző, az összes alkalmazásban gyakran használt, újrafelhasználható párbeszédpanelt implementál, beleértve a fájlok kiválasztására és a nyomtatásra szolgáló párbeszédpaneleket is.
Mivel ezeket a párbeszédpaneleket az operációs rendszer biztosítja, azok meg vannak osztva az operációs rendszeren futó összes alkalmazás között. Ezek a párbeszédpanelek konzisztens felhasználói élményt biztosítanak, és gyakori párbeszédpanelekként ismertek. Mivel a felhasználók egy alkalmazásban gyakran használt párbeszédpanelt használnak, nem kell megtanulniuk, hogyan használhatják ezt a párbeszédpanelt más alkalmazásokban.
A WPF beágyazza a megnyitott fájlt, menti a fájlt, megnyit egy mappát, és kinyomtatja a közös párbeszédpaneleket, és felügyelt osztályként teszi elérhetővé őket.
A gyakori párbeszédpanelekről az alábbi cikkekben olvashat bővebben:
- Gyakori párbeszédpanel megjelenítése
- Fájl megnyitása párbeszédpanel megjelenítése
- Fájl mentése párbeszédpanel megjelenítése
- Mappa megnyitása párbeszédpanel
- Nyomtatás párbeszédpanel megjelenítése
Egyéni párbeszédpanelek
Bár a gyakori párbeszédpanelek hasznosak, és ha lehetséges, használni kell őket, nem támogatják a tartományspecifikus párbeszédpanelek követelményeit. Ezekben az esetekben létre kell hoznia saját párbeszédpaneleket. Amint látni fogjuk, a párbeszédpanel egy speciális viselkedésű ablak. Window implementálja ezeket a viselkedéseket, és az ablakban egyéni modális és nem modális párbeszédpaneleket hozhat létre.
A saját párbeszédpanel létrehozásakor számos tervezési szempontot figyelembe kell venni. Bár az alkalmazásablak és a párbeszédpanel egyaránt tartalmaz hasonlóságokat, például ugyanazt az alaposztályt, egy párbeszédpanelt használ egy adott célra. Általában párbeszédpanelre van szükség, amikor valamilyen információt vagy választ kell kérnie a felhasználótól. Az alkalmazás általában szünetel, amíg megjelenik a párbeszédpanel (modális), korlátozva az alkalmazás többi részéhez való hozzáférést. A párbeszédpanel bezárása után az alkalmazás folytatódik. Az interakciók korlátozása csak a párbeszédpanelre azonban nem követelmény.
Ha egy WPF-ablak be van zárva, az nem nyitható meg újra. Az egyéni párbeszédpanelek WPF-ablakok, és ugyanez a szabály érvényes. Az ablak bezárásáról az Ablak vagy párbeszédpanel bezárásacímű témakörben olvashat.
Párbeszédpanel megvalósítása
Párbeszédpanel tervezésekor kövesse az alábbi javaslatokat a megfelelő felhasználói élmény létrehozásához:
❌ NE tegye zsúfolttá a párbeszédpanelt. A párbeszédpanelen a felhasználónak meg kell adnia néhány adatot, vagy választania kell.
✔️ Feltétlenül biztosítson egy OK gombot az ablak bezárásához.
✔️ ÁLLÍTSA BE az OK gomb IsDefault tulajdonságát true értékre, hogy a felhasználó az ENTER billentyűt lenyomva elfogadhassa és bezárhassa az ablakot.
Javasolt egy Mégse gomb hozzáadása, hogy a felhasználó bezárja az ablakot, és jelezze, hogy nem akarja folytatni.
✔️ A DO állítsa a Mégse gomb IsCancel tulajdonságát true, hogy a felhasználó az ablak bezárásához nyomja le a ESC billentyűt.
✔️ A DO az ablak címét úgy állítja be, hogy pontosan leírja, mit jelöl a párbeszédpanel, vagy hogy a felhasználó mit tegyen a párbeszédpanelen.
✔️ A DO állítsa be az ablak minimális szélességi és magassági értékeit, így a felhasználó nem méretezheti túl kicsire az ablakot.
✔️ Fontolja meg az ablak átméretezésének letiltását, ha ShowInTaskbarfalseértékre van állítva. Az átméretezést úgy tilthatja le, hogy a ResizeMode beállítást NoResize-re állítja.
Az alábbi kód bemutatja ezt a konfigurációt.
<Window x:Class="Dialogs.Margins"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Change Margins"
Closing="Window_Closing"
MinHeight="200"
MinWidth="300"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize"
ShowInTaskbar="False"
WindowStartupLocation="CenterOwner"
FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">
<Grid Margin="10">
<Grid.Resources>
<!-- Default settings for controls -->
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="0,3,5,5" />
<Setter Property="Padding" Value="0,0,0,5" />
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,0,0,5" />
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="70" />
<Setter Property="Height" Value="25" />
<Setter Property="Margin" Value="5,0,0,0" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Left,Top,Right,Bottom margins-->
<Label Grid.Column="0" Grid.Row="0">Left Margin:</Label>
<TextBox Name="leftMarginTextBox" Grid.Column="1" Grid.Row="0" />
<Label Grid.Column="0" Grid.Row="1">Top Margin:</Label>
<TextBox Name="topMarginTextBox" Grid.Column="1" Grid.Row="1"/>
<Label Grid.Column="0" Grid.Row="2">Right Margin:</Label>
<TextBox Name="rightMarginTextBox" Grid.Column="1" Grid.Row="2" />
<Label Grid.Column="0" Grid.Row="3">Bottom Margin:</Label>
<TextBox Name="bottomMarginTextBox" Grid.Column="1" Grid.Row="3" />
<!-- Accept or Cancel -->
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Name="okButton" Click="okButton_Click" IsDefault="True">OK</Button>
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
</StackPanel>
</Grid >
</Window>
A fenti XAML az alábbi képhez hasonló ablakot hoz létre:
Párbeszédpanelt megnyitó felhasználói felületi elemek
A párbeszédpanel felhasználói felülete a menüsávra vagy a megnyíló ablak gombjára is kiterjed. Ha egy menüelem vagy gomb olyan függvényt futtat, amely felhasználói interakciót igényel egy párbeszédpanelen, mielőtt a függvény folytatódhat, a vezérlőnek a szöveg végén három pontot kell használnia:
<MenuItem Header="_Margins..." Click="formatMarginsMenuItem_Click" />
<!-- or -->
<Button Content="_Margins..." Click="formatMarginsButton_Click" />
Ha egy menüelem vagy gomb olyan függvényt futtat, amely olyan párbeszédpanelt jelenít meg, amely nem felhasználói beavatkozást igényel, például Névjegy párbeszédpanelen, nincs szükség három pontra.
Menüelemek
A menüelemek gyakran biztosítják a felhasználók számára a kapcsolódó témákba csoportosított alkalmazásműveleteket. Valószínűleg számos különböző alkalmazásban látta a Fájl menüt. Egy tipikus alkalmazásban a Fájl menüelem lehetővé teszi a fájlok mentését, betöltését és nyomtatását. Ha a művelet modális ablakot jelenít meg, a fejléc általában pontokat tartalmaz, ahogyan az a következő képen látható.
Két menüelem mögött három pont van: .... Ez segít a felhasználónak azonosítani, hogy amikor kiválasztja ezeket a menüelemeket, megjelenik egy modális ablak, amely addig szünetelteti az alkalmazást, amíg a felhasználó be nem zárja.
Ezzel a tervezési technikával egyszerűen kommunikálhat a felhasználókkal, hogy mit várnak el.
Gombok
A menüelemek szakaszban ismertetett elvet követheti. A gomb szövegében használjon három pontot annak jelzésére, hogy a felhasználó a gomb lenyomásakor egy modális párbeszédpanel jelenik meg. Az alábbi képen két gomb látható, és könnyen érthető, hogy melyik gomb jelenik meg egy párbeszédpanelen:
Eredmény visszaadása
Egy másik ablak, különösen egy modális párbeszédpanel megnyitása nagyszerű módja annak, hogy állapotot és információt adjon vissza a hívó kódnak.
Modális párbeszédpanelek
Ha egy párbeszédpanel ShowDialog()meghívásával jelenik meg, a párbeszédpanelt megnyitó kód megvárja, amíg a ShowDialog metódus visszatér. Amikor a metódus visszatér, az azt nevező kódnak el kell döntenie, hogy folytatja-e a feldolgozást, vagy leállítja a feldolgozást. A felhasználó ezt általában egy OK vagy Mégse gomb megnyomásával jelzi a párbeszédpanelen.
Amikor az OK gombot lenyomják, a ShowDialog-t úgy kell megtervezni, hogy visszatérjen true-ra, és a Mégse gomb visszatérjen false-ra. Ez a gomb megnyomásakor a DialogResult tulajdonság beállításával érhető el.
private void okButton_Click(object sender, RoutedEventArgs e) =>
DialogResult = true;
private void cancelButton_Click(object sender, RoutedEventArgs e) =>
DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
DialogResult = True
End Sub
Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
DialogResult = False
End Sub
A DialogResult tulajdonság csak akkor állítható be, ha a párbeszédpanel ShowDialog()meg lett jelenítve. Ha a DialogResult tulajdonság be van állítva, a párbeszédpanel bezárul.
Ha egy gomb IsCancel tulajdonsága trueértékre van állítva, és az ablak ShowDialog()van megnyitva, a ESC billentyű bezárja az ablakot, és beállítja DialogResult-t false-ra.
További információ a párbeszédpanelek bezárásáról: Ablak vagy párbeszédpanel bezárása.
A válasz feldolgozása
A ShowDialog() logikai értéket ad vissza, amely jelzi, hogy a felhasználó elfogadta vagy megszakította-e a párbeszédpanelt. Ha riasztást küld a felhasználónak valamiről, de nem követeli meg a döntés meghozatalát vagy az adatok megadását, figyelmen kívül hagyhatja a választ. A válasz a DialogResult tulajdonság ellenőrzésével is megvizsgálható. A következő kód bemutatja, hogyan lehet feldolgozni a választ:
var dialog = new Margins();
// Display the dialog box and read the response
bool? result = dialog.ShowDialog();
if (result == true)
{
// User accepted the dialog box
MessageBox.Show("Your request will be processed.");
}
else
{
// User cancelled the dialog box
MessageBox.Show("Sorry it didn't work out, we'll try again later.");
}
Dim marginsWindow As New Margins
Dim result As Boolean? = marginsWindow.ShowDialog()
If result = True Then
' User accepted the dialog box
MessageBox.Show("Your request will be processed.")
Else
' User cancelled the dialog box
MessageBox.Show("Sorry it didn't work out, we'll try again later.")
End If
marginsWindow.Show()
Mód nélküli párbeszédpanel
A párbeszédpanel modellesség megjelenítéséhez hívja meg Show(). A párbeszédpanelen legalább egy Bezárás gombot kell megadnia. Más gombokat és interaktív elemeket is megadhat egy adott függvény futtatásához, például egy Következő keresése gombot, hogy megkeresse a következő szót egy szókeresésben.
Mivel egy modeless párbeszédpanel nem akadályozza meg a hívó kód folytatását, más módot kell találni az eredmény visszaadására. Az alábbiak egyikét teheti meg:
- Adatobjektum-tulajdonság felfedése az ablakban.
- Kezelje a Window.Closed eseményt a hívókódban.
- Hozzon létre eseményeket az ablakban, amelyek akkor jelennek meg, amikor a felhasználó kijelöl egy objektumot, vagy lenyom egy adott gombot.
Az alábbi példa a Window.Closed esemény használatával jelenít meg egy üzenetmezőt a felhasználónak a párbeszédpanel bezárásakor. A megjelenített üzenet a bezárt párbeszédpanel egyik tulajdonságára hivatkozik. További információ a párbeszédpanelek bezárásáról: Ablak vagy párbeszédpanel bezárása.
var marginsWindow = new Margins();
marginsWindow.Closed += (sender, eventArgs) =>
{
MessageBox.Show($"You closed the margins window! It had the title of {marginsWindow.Title}");
};
marginsWindow.Show();
Dim marginsWindow As New Margins
AddHandler marginsWindow.Closed, Sub(sender As Object, e As EventArgs)
MessageBox.Show($"You closed the margins window! It had the title of {marginsWindow.Title}")
End Sub
marginsWindow.Show()
Lásd még
.NET Desktop feedback