Diskuze: WPF RichTextBox
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Jakub Lásko[Saarix]:9.2.2015 11:53
Hod sem kód jak tu velikost nastavuješ či zda to mas jako property u rich boxu.
XAML
<Window x:Class="MyWpfTextEditor.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>
<RichTextBox x:Name="rtBox" HorizontalAlignment="Left" Height="264" Margin="10,45,0,0" VerticalAlignment="Top" Width="323" TextChanged="rtBox_TextChanged" Loaded="rtBox_Loaded"/>
<ComboBox x:Name="fontSizeComBox" SelectedIndex="4" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="50" Loaded="fontSizeComBox_Loaded" SelectionChanged="fontSizeComBox_SelectionChanged"/>
<ComboBox x:Name="fontNameComBox" SelectedIndex="9" HorizontalAlignment="Left" Margin="65,10,0,0" VerticalAlignment="Top" Width="230" SelectionChanged="fontNameComBox_SelectionChanged" Loaded="fontNameComBox_Loaded"/>
<ToggleButton x:Name="boldToggButt" Content="B" FontWeight="Bold" Width="22" Height="22" Margin="300,10,192,287" Checked="boldToggButt_Checked" Unchecked="boldToggButt_Unchecked" />
<ToggleButton x:Name="italicToggButt" Content="I" FontStyle="Italic" Width="22" Height="22" Margin="328,10,167,287" Checked="italicToggButt_Checked" Unchecked="italicToggButt_Unchecked"/>
<ToggleButton x:Name="underToggButt" Width="22" Height="22" Margin="355,10,140,287" Checked="underToggButt_Checked" Unchecked="underToggButt_Unchecked">
<ToggleButton.Content>
<TextBlock>
<Underline>U</Underline>
</TextBlock>
</ToggleButton.Content>
</ToggleButton>
</Grid>
</Window>
A CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace MyWpfTextEditor
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void rtBox_Loaded(object sender, RoutedEventArgs e)
{
rtBox.AcceptsTab = true;
rtBox.AcceptsReturn = true;
rtBox.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
}
//Nastavení velikosti fontu
private void fontSizeComBox_Loaded(object sender, RoutedEventArgs e)
{
fontSizeComBox.ItemsSource = new List<double>() { 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72 };
}
private void fontSizeComBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontSizeProperty, fontSizeComBox.SelectedValue.ToString());
rtBox.Focus();
}
//Nastavení typu fontu
private void fontNameComBox_Loaded(object sender, RoutedEventArgs e)
{
fontNameComBox.ItemsSource = Fonts.SystemFontFamilies.OrderBy(f => f.Source);
}
private void fontNameComBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontFamilyProperty, fontNameComBox.SelectedItem);
rtBox.Focus();
}
//Nastavení RichTextBoxu
private void rtBox_TextChanged(object sender, TextChangedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontSizeProperty, fontSizeComBox.SelectedValue.ToString());
rtBox.Selection.ApplyPropertyValue(Inline.FontFamilyProperty, fontNameComBox.SelectedItem);
//Bold Button
if (boldToggButt.IsChecked.Value)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontWeightProperty, FontWeights.Bold);
}
else
{
rtBox.Selection.ApplyPropertyValue(Inline.FontWeightProperty, FontWeights.Normal);
}
//Italic Button
if (italicToggButt.IsChecked.Value)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontStyleProperty, FontStyles.Italic);
}
else
{
rtBox.Selection.ApplyPropertyValue(Inline.FontStyleProperty, FontStyles.Normal);
}
//Underline Button
if (underToggButt.IsChecked.Value)
{
rtBox.Selection.ApplyPropertyValue(Inline.TextDecorationsProperty, TextDecorations.Underline);
}
else
{
rtBox.Selection.ApplyPropertyValue(Inline.TextDecorationsProperty, null);
}
}
//Nastavení Bold Button
private void boldToggButt_Checked(object sender, RoutedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontWeightProperty, FontWeights.Bold);
}
private void boldToggButt_Unchecked(object sender, RoutedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontWeightProperty, FontWeights.Normal);
}
//Nastavení Italic Button
private void italicToggButt_Checked(object sender, RoutedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontStyleProperty, FontStyles.Italic);
}
private void italicToggButt_Unchecked(object sender, RoutedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.FontStyleProperty, FontStyles.Normal);
}
//Nastavení Underline Button
private void underToggButt_Checked(object sender, RoutedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.TextDecorationsProperty, TextDecorations.Underline);
}
private void underToggButt_Unchecked(object sender, RoutedEventArgs e)
{
rtBox.Selection.ApplyPropertyValue(Inline.TextDecorationsProperty, null);
}
}
}
sadlomaslox25:9.2.2015 21:28
no mas to proste blbe no xD
property Selected je oznaceny text, takze kdyz menis velikost nad selected a nic
neni vybrane tak to proste nefunguje.
zkusil bych predelat vsechny metody na neco takoveho:
private void fontSizeComBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (rtBox.Selection.IsEmpty)
{
var r = new Run() {FontSize = (double) fontSizeComBox.SelectedValue};
(rtBox.Document.Blocks.FirstBlock as Paragraph).Inlines.Add(r);
rtBox.CaretPosition = r.ElementStart;
}
else
rtBox.Selection.ApplyPropertyValue(Inline.FontSizeProperty, fontSizeComBox.SelectedValue.ToString());
rtBox.Focus();
}
btw tohle funguje pro zmenu velikosti
Majkel:10.2.2015 15:20
Ahoj, takže když to upravím, jak jsi psal, tak se mi to stejně pořád chová divně. Občas se označený text vůbec neupraví, občas mi to změní celý řádek na stejnou velikost, i když je označený jen kousek. Prošel jsem už několik článků a návodů s kompletním řešením, které když jsem si zkopíroval, tak nakonec taky nefungovalo. Už pomalu nevím, co s tím.
sadlomaslox25:10.2.2015 15:57
a upravil si odpovidajicim zpusobem i ostatni metody jako textChange/fontChange/boldChange? ...
Majkel:10.2.2015 16:28
Buttony zatím neupravuju, až vyřeším to hlavní.
private void rtBox_TextChanged(object sender, TextChangedEventArgs e)
Mám upravit stejně jako
private void fontSizeComBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
?
Zobrazeno 7 zpráv z 7.