Megosztás a következőn keresztül:


Bővített szerkesztőmező

RichEditBox-vezérlővel formázott szöveget, hivatkozásokat, képeket, matematikai egyenleteket és egyéb rich tartalmakat tartalmazó rich szöveges dokumentumokat adhat meg és szerkeszthet. A RichEditBox írásvédetté alakításához állítsa az IsReadOnly tulajdonságát igazra.

Ez a megfelelő vezérlő?

Szövegfájlok megjelenítése és szerkesztése RichEditBox használatával. A RichEditBox nem használja a felhasználói bemenetek beolvasását az alkalmazásba úgy, ahogyan más szabványos szövegbeviteli mezőket használ. Inkább ezt arra használja, hogy az alkalmazástól különálló szövegfájlokkal dolgozzon. A RichEditBoxba beírt szöveget általában egy .rtf fájlba menti.

  • Ha a többsoros szövegdoboz elsődleges célja írásvédett dokumentumok (például blogbejegyzések vagy e-mail tartalma) létrehozása, és ezekhez a dokumentumokhoz rich textre van szükség, használjon inkább rich text blokkot .
  • Ha olyan szöveget rögzít, amely csak a felhasználók számára lesz felhasználva, és nem kerül visszajátszásra, használjon egyszerű szövegbeviteli vezérlőt.
  • Minden más forgatókönyv esetén használjon egyszerű szöveges beviteli vezérlőt.

A megfelelő szövegvezérlő kiválasztásáról további információt a Szövegvezérlők című cikkben talál.

Recommendations

  • Amikor gazdag szövegdobozt hoz létre, adjon meg stílusgombokat, és valósítsa meg azok műveleteit.
  • Az alkalmazás stílusának megfelelő betűtípust használjon.
  • Állítsa a szövegvezérlő magasságát olyan magasra, hogy megfeleljen a tipikus bejegyzéseknek.
  • Ne engedje, hogy a szövegbeviteli vezérlők magasságban növekedjenek a felhasználók gépelése közben.
  • Ne használjon többsoros szövegdobozt, ha a felhasználóknak csak egyetlen sorra van szükségük.
  • Ne használjon rich text vezérlőelemet, ha egy egyszerű szövegvezérlő megfelelő.

Példák

Ebben a rich edit boxban meg van nyitva egy rich text dokumentum. A formázási és fájlgombok nem részei a részletes szerkesztési mezőnek, de legalább minimális stílusgombokat kell megadnia, és végre kell hajtania a műveleteket.

Rich Text Box, amely egy megnyitott dokumentumot tartalmaz

Hozzon létre egy gazdag szövegdobozt.

WinUI 3 Katalógus ikon A WinUI 3 Katalógus alkalmazás interaktív példákat tartalmaz a WinUI vezérlőire és funkcióira. Kérje le az alkalmazást a Microsoft Áruházból vagy keresse meg a forráskódot a GitHub webhelyen.

Alapértelmezés szerint a RichEditBox támogatja a helyesírás-ellenőrzést. A helyesírás-ellenőrző letiltásához állítsa az IsSpellCheckEnabled tulajdonságothamisra. További információ: Útmutató a helyesírás-ellenőrzéshez című cikk.

A RichEditBox Dokumentum tulajdonságával szerezheti be a tartalmát. A RichEditBox tartalma egy ITextDocument objektum, ellentétben a RichTextBlock vezérlővel, amely a Block objektumokat használja tartalomként. Az ITextDocument felület segítségével betöltheti és mentheti a dokumentumot egy streambe, lekérheti a szövegtartományokat, lekérheti az aktív kijelölést, visszavonhatja és újra hajthatja végre a módosításokat, beállíthatja az alapértelmezett formázási attribútumokat stb.

Ez a példa bemutatja, hogyan szerkeszthet, tölthet be és menthet RichEditBox-fájlokat (.rtf).

<RelativePanel Margin="20" HorizontalAlignment="Stretch">
    <RelativePanel.Resources>
        <Style TargetType="AppBarButton">
            <Setter Property="IsCompact" Value="True"/>
        </Style>
    </RelativePanel.Resources>
    <AppBarButton x:Name="openFileButton" Icon="OpenFile"
                  Click="OpenButton_Click" ToolTipService.ToolTip="Open file"/>
    <AppBarButton Icon="Save" Click="SaveButton_Click"
                  ToolTipService.ToolTip="Save file"
                  RelativePanel.RightOf="openFileButton" Margin="8,0,0,0"/>

    <AppBarButton Icon="Bold" Click="BoldButton_Click" ToolTipService.ToolTip="Bold"
                  RelativePanel.LeftOf="italicButton" Margin="0,0,8,0"/>
    <AppBarButton x:Name="italicButton" Icon="Italic" Click="ItalicButton_Click"
                  ToolTipService.ToolTip="Italic" RelativePanel.LeftOf="underlineButton" Margin="0,0,8,0"/>
    <AppBarButton x:Name="underlineButton" Icon="Underline" Click="UnderlineButton_Click"
                  ToolTipService.ToolTip="Underline" RelativePanel.AlignRightWithPanel="True"/>

    <RichEditBox x:Name="editor" Height="200" RelativePanel.Below="openFileButton"
                 RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True"/>
</RelativePanel>
private async void OpenButton_Click(object sender, RoutedEventArgs e)
{
    // Open a text file.
    Windows.Storage.Pickers.FileOpenPicker open =
        new Windows.Storage.Pickers.FileOpenPicker();
    open.SuggestedStartLocation =
        Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
    open.FileTypeFilter.Add(".rtf");

    Windows.Storage.StorageFile file = await open.PickSingleFileAsync();

    if (file != null)
    {
        try
        {
            Windows.Storage.Streams.IRandomAccessStream randAccStream =
        await file.OpenAsync(Windows.Storage.FileAccessMode.Read);

            // Load the file into the Document property of the RichEditBox.
            editor.Document.LoadFromStream(Windows.UI.Text.TextSetOptions.FormatRtf, randAccStream);
        }
        catch (Exception)
        {
            ContentDialog errorDialog = new ContentDialog()
            {
                Title = "File open error",
                Content = "Sorry, I couldn't open the file.",
                PrimaryButtonText = "Ok"
            };

            await errorDialog.ShowAsync();
        }
    }
}

private async void SaveButton_Click(object sender, RoutedEventArgs e)
{
    Windows.Storage.Pickers.FileSavePicker savePicker = new Windows.Storage.Pickers.FileSavePicker();
    savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;

    // Dropdown of file types the user can save the file as
    savePicker.FileTypeChoices.Add("Rich Text", new List<string>() { ".rtf" });

    // Default file name if the user does not type one in or select a file to replace
    savePicker.SuggestedFileName = "New Document";

    Windows.Storage.StorageFile file = await savePicker.PickSaveFileAsync();
    if (file != null)
    {
        // Prevent updates to the remote version of the file until we
        // finish making changes and call CompleteUpdatesAsync.
        Windows.Storage.CachedFileManager.DeferUpdates(file);
        // write to file
        Windows.Storage.Streams.IRandomAccessStream randAccStream =
            await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

        editor.Document.SaveToStream(Windows.UI.Text.TextGetOptions.FormatRtf, randAccStream);

        // Let Windows know that we're finished changing the file so the
        // other app can update the remote version of the file.
        Windows.Storage.Provider.FileUpdateStatus status = await Windows.Storage.CachedFileManager.CompleteUpdatesAsync(file);
        if (status != Windows.Storage.Provider.FileUpdateStatus.Complete)
        {
            Windows.UI.Popups.MessageDialog errorBox =
                new Windows.UI.Popups.MessageDialog("File " + file.Name + " couldn't be saved.");
            await errorBox.ShowAsync();
        }
    }
}

private void BoldButton_Click(object sender, RoutedEventArgs e)
{
    Windows.UI.Text.ITextSelection selectedText = editor.Document.Selection;
    if (selectedText != null)
    {
        Windows.UI.Text.ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
        charFormatting.Bold = Windows.UI.Text.FormatEffect.Toggle;
        selectedText.CharacterFormat = charFormatting;
    }
}

private void ItalicButton_Click(object sender, RoutedEventArgs e)
{
    Windows.UI.Text.ITextSelection selectedText = editor.Document.Selection;
    if (selectedText != null)
    {
        Windows.UI.Text.ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
        charFormatting.Italic = Windows.UI.Text.FormatEffect.Toggle;
        selectedText.CharacterFormat = charFormatting;
    }
}

private void UnderlineButton_Click(object sender, RoutedEventArgs e)
{
    Windows.UI.Text.ITextSelection selectedText = editor.Document.Selection;
    if (selectedText != null)
    {
        Windows.UI.Text.ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
        if (charFormatting.Underline == Windows.UI.Text.UnderlineType.None)
        {
            charFormatting.Underline = Windows.UI.Text.UnderlineType.Single;
        }
        else {
            charFormatting.Underline = Windows.UI.Text.UnderlineType.None;
        }
        selectedText.CharacterFormat = charFormatting;
    }
}

Rich Edit box használata matematikai egyenletekhez

A RichEditBox képes megjeleníteni és szerkeszteni a matematikai egyenleteket a UnicodeMath használatával. Az egyenletek mathML 3.0 formátumban vannak tárolva és lekérve.

Alapértelmezés szerint a RichEditBox vezérlő nem matematikaiként értelmezi a bemenetet. A matematikai mód engedélyezéséhez hívja meg a SetMathMode értéket a TextDocument tulajdonságban, és adja át a RichEditMathMode.MathOnly értéket (a matematikai mód letiltásához hívja meg a SetMathMode-t , de adja meg a NoMath értéket).

richEditBox.TextDocument.SetMathMode(Microsoft.UI.Text.RichEditMathMode.MathOnly);

Ez lehetővé teszi a UnicodeMath-bemenetek automatikus felismerését és mathML-re való konvertálását valós időben. Például a 4^2 beírása 4²-re, míg az 1/2 beírása ½-re alakul át. További példákért tekintse meg a WinUI 3 Katalógus alkalmazást .

Ha egy rich edit box matematikai tartalmát MathML-sztringként szeretné menteni, hívja meg a GetMathML-et.

richEditBox.TextDocument.GetMathML(out String mathML);

A rich edit box matematikai tartalmának beállításához hívja meg a SetMathML-et, és adjon át egy MathML-sztringet.

A szövegvezérlő megfelelő billentyűzetének kiválasztása

Ha azt szeretné, hogy a felhasználók az érintőbillentyűzet vagy a Soft Input Panel (SIP) használatával adjanak meg adatokat, beállíthatja a szövegvezérlő bemeneti hatókörét úgy, hogy az megfeleljen a felhasználó által várt adattípusnak. Az alapértelmezett billentyűzetkiosztás általában alkalmas a rich text dokumentumok használatához.

További információ a beviteli hatókörök használatáról: Beviteli hatókör használata az érintőbillentyűzet módosításához.