NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
beats.omni
Člen
Avatar
beats.omni:11.4.2015 10:38

Snažím se vytvořit jednoduchý textový editor z RichTextBoxu ve WPF, se změnou velikosti písma a fontu. Našel jsem tady na to téma nedořešenou diskuzi. Díval jsem se i různě po netu, ale nikde jsem nenašel řešení. Dal jsem něco málo dohromady, ale pořád to není ono.

Napřiklad, když se chci vrátit v nějakém řádku například za první slovo, tak musím kliknout třikrát, než se mi tam objeví kurzor. Když tam pak chci třeba začít psát větším písmem, tak se mi kurzor zase přesune na konec. Už z toho pomalu šílím.

Mohl by někdo poradit.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        fontSizeComBox.ItemsSource = new List<double>() { 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 };
        fontSizeComBox.SelectedIndex = 4;
        rtBox.AcceptsTab = true;
        rtBox.AcceptsReturn = true;
        rtBox.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
    }

    private void fontSizeComBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (rtBox.Selection.IsEmpty)
        {
            Run r = new Run() { FontSize = (double)fontSizeComBox.SelectedValue };
            rtBox.CaretPosition.Paragraph.Inlines.Add(r);
            rtBox.CaretPosition = r.ElementStart;
        }
        else
        {
            rtBox.Selection.ApplyPropertyValue(Inline.FontSizeProperty, fontSizeComBox.SelectedItem);
        }
        rtBox.Focus();
    }

    private void rtBox_SelectionChanged(object sender, RoutedEventArgs e)
    {
        object tempValue = rtBox.Selection.GetPropertyValue(TextElement.FontSizeProperty);
        fontSizeComBox.SelectedValue = tempValue;
    }
}
Editováno 11.4.2015 10:42
 
Odpovědět
11.4.2015 10:38
Avatar
rawen
Člen
Avatar
Odpovídá na beats.omni
rawen:15.4.2015 15:16

Já bych řekl, že problém je v tomto bloku:

Run r = new Run() { FontSize = (double)fontSizeComBox.SelectedValue };
rtBox.CaretPosition.Paragraph.Inlines.Add(r);
rtBox.CaretPosition = r.ElementStart;

Ty problémy, co zde zminuješ zmizely, když jsem si tuto část zakomentoval. Nejsem si úplně jistej, protože s tím Run a CaretPosition nemám zkušenosti, ale řekl bych, že to funguje tak, že když tam přidáš do rtBoxu onen element, tak se přidá na konec, na jehož pozici se odkazuješ, proto to skáče na konec. Jinak mě osobně to někdy i spadlo v této části..

Editováno 15.4.2015 15:17
Nahoru Odpovědět
15.4.2015 15:16
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
beats.omni
Člen
Avatar
Odpovídá na rawen
beats.omni:30.4.2015 8:26

Tam je určitě problém :D Ale já právě nevím, co s tím. Jde to vůbec udělat?

 
Nahoru Odpovědět
30.4.2015 8:26
Avatar
Člen
Člen
Avatar
Nahoru Odpovědět
11.5.2015 10:40
...
Avatar
beats.omni
Člen
Avatar
Odpovídá na Člen
beats.omni:13.5.2015 13:17

Ten odkaz je jen obyčejný notepad. Ten ve WPF udělat umím. Co neumím, je textový editor, který se bude chovat podobně jako WordPad. Notepadů jsou všude hromady.

 
Nahoru Odpovědět
13.5.2015 13:17
Avatar
Člen
Člen
Avatar
Odpovídá na beats.omni
Člen:14.5.2015 7:24

Pošli mi tvoje kódy - pozriem sa na to :)

Nahoru Odpovědět
14.5.2015 7:24
...
Avatar
Majkel
Člen
Avatar
Odpovídá na beats.omni
Majkel:8.6.2015 18:18

Ahoj, jelikož jsem tady taky neúspěšně řešil wordpad like editor pro WPF, tak by mě zajímalo, jestli jsi s tím někam pokročil?

 
Nahoru Odpovědět
8.6.2015 18:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.