Как сделать TextBlock внутри поля форматированного текста неудаляемым? ⇐ C#
-
Anonymous
Как сделать TextBlock внутри поля форматированного текста неудаляемым?
private void AddVCard() { FlowDocument flowDocument = rich.Document; Параграф dp = новый параграф(); Запустите fnRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите CompanyRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите telRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите emailRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите adrRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; InlineUIContainer fnTb = new InlineUIContainer(new TextBlock() { Tag = "fn", Text = "Имя:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer ctbh = new InlineUIContainer(new TextBlock() { Tag = "company", Text = "Company:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer teltb = new InlineUIContainer(new TextBlock() { Tag = "tel", Text = "Phone/Tel No:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer emailtb = новый InlineUIContainer(new TextBlock() { Tag = "электронная почта", Text = "Электронная почта:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer adrtb = new InlineUIContainer(new TextBlock() { Tag = "adr", Text = "Адрес:", Foreground = System.Windows.Media.Brushes.Green }); fnTb.Unloaded += InlineUIContainer_Unloaded_1; ctbh.Unloaded += InlineUIContainer_Unloaded_2; teltb.Unloaded += InlineUIContainer_Unloaded_3; emailtb.Unloaded += InlineUIContainer_Unloaded_4; adrtb.Unloaded += InlineUIContainer_Unloaded_5; dp.Inlines.Add(fnTb); //np.Inlines.Add(fnTb); dp.Inlines.Add(fnRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(ctbh); //np.Inlines.Add(ctbh); dp.Inlines.Add(companyRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(teltb); //np.Inlines.Add(teltb); dp.Inlines.Add(telRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(emailtb); //np.Inlines.Add(emailtb); dp.Inlines.Add(emailRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(adrtb); //np.Inlines.Add(adrtb); dp.Inlines.Add(adrRun); vcardRuns["fn"] = fnRun; vcardRuns["компания"] = CompanyRun; vcardRuns["tel"] = telRun; vcardRuns["email"] = emailRun; vcardRuns["adr"] = adrRun; // Получаем FlowDocument RichTextBox // Добавляем динамический параграф в коллекцию блоков потокДокумент.Блоки.Добавить(дп); } частная пустота InlineUIContainer_Unloaded_1 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_1); TextBlock tb = новый TextBlock(); tb.Text = "Полное имя:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_1); } частная пустота InlineUIContainer_Unloaded_2 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_2); TextBlock tb = новый TextBlock(); tb.Text = "Компания:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_2); } частная пустота InlineUIContainer_Unloaded_3 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded -= новый RoutedEventHandler(InlineUIContainer_Unloaded_3); TextBlock tb = новый TextBlock(); tb.Text = "Телефон/Телефон:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_3); } частная пустота InlineUIContainer_Unloaded_4 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_4); TextBlock tb = новый TextBlock(); tb.Text = "Электронная почта:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_4); } частная пустота InlineUIContainer_Unloaded_5 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_5); TextBlock tb = новый TextBlock(); tb.Text = "Адрес:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_5); } } (код обновлен) У меня есть следующий код, в котором я добавляю текстовые блоки во встроенные динамические абзацы, но пользователь может полностью удалить текстовые блоки, как и любой другой текст.
Я не хочу, чтобы пользователь удалял TextBlock, и я хочу, чтобы он оставался неподвижным.
Обновление. Я попробовал выполнить публикацию об элементе запуска только для чтения, но мне не удалось переместить курсор на соответствующий запуск, и я думаю, что если это сделано правильно, проблема, скорее всего, должна быть решена.< /п>
private void AddVCard() { FlowDocument flowDocument = rich.Document; Параграф dp = новый параграф(); Запустите fnRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите CompanyRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите telRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите emailRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; Запустите adrRun = new Run() {Foreground = System.Windows.Media.Brushes.Black }; InlineUIContainer fnTb = new InlineUIContainer(new TextBlock() { Tag = "fn", Text = "Имя:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer ctbh = new InlineUIContainer(new TextBlock() { Tag = "company", Text = "Company:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer teltb = new InlineUIContainer(new TextBlock() { Tag = "tel", Text = "Phone/Tel No:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer emailtb = новый InlineUIContainer(new TextBlock() { Tag = "электронная почта", Text = "Электронная почта:", Foreground = System.Windows.Media.Brushes.Green }); InlineUIContainer adrtb = new InlineUIContainer(new TextBlock() { Tag = "adr", Text = "Адрес:", Foreground = System.Windows.Media.Brushes.Green }); fnTb.Unloaded += InlineUIContainer_Unloaded_1; ctbh.Unloaded += InlineUIContainer_Unloaded_2; teltb.Unloaded += InlineUIContainer_Unloaded_3; emailtb.Unloaded += InlineUIContainer_Unloaded_4; adrtb.Unloaded += InlineUIContainer_Unloaded_5; dp.Inlines.Add(fnTb); //np.Inlines.Add(fnTb); dp.Inlines.Add(fnRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(ctbh); //np.Inlines.Add(ctbh); dp.Inlines.Add(companyRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(teltb); //np.Inlines.Add(teltb); dp.Inlines.Add(telRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(emailtb); //np.Inlines.Add(emailtb); dp.Inlines.Add(emailRun); dp.Inlines.Add(новый LineBreak()); dp.Inlines.Add(adrtb); //np.Inlines.Add(adrtb); dp.Inlines.Add(adrRun); vcardRuns["fn"] = fnRun; vcardRuns["компания"] = CompanyRun; vcardRuns["tel"] = telRun; vcardRuns["email"] = emailRun; vcardRuns["adr"] = adrRun; // Получаем FlowDocument RichTextBox // Добавляем динамический параграф в коллекцию блоков потокДокумент.Блоки.Добавить(дп); } частная пустота InlineUIContainer_Unloaded_1 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_1); TextBlock tb = новый TextBlock(); tb.Text = "Полное имя:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_1); } частная пустота InlineUIContainer_Unloaded_2 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_2); TextBlock tb = новый TextBlock(); tb.Text = "Компания:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_2); } частная пустота InlineUIContainer_Unloaded_3 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded -= новый RoutedEventHandler(InlineUIContainer_Unloaded_3); TextBlock tb = новый TextBlock(); tb.Text = "Телефон/Телефон:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_3); } частная пустота InlineUIContainer_Unloaded_4 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_4); TextBlock tb = новый TextBlock(); tb.Text = "Электронная почта:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_4); } частная пустота InlineUIContainer_Unloaded_5 (отправитель объекта, RoutedEventArgs e) { (отправитель как InlineUIContainer).Unloaded - = новый RoutedEventHandler(InlineUIContainer_Unloaded_5); TextBlock tb = новый TextBlock(); tb.Text = "Адрес:"; tb.Foreground = System.Windows.Media.Brushes.Green; TextPointer tp = rich.CaretPosition.GetInsertionPosition(LogicalDirection.Forward); //rich.CaretPosition = rich.CaretPosition.GetPositionAtOffset(tb.Text.Length+1); InlineUIContainer iuic = новый InlineUIContainer(tb, tp); iuic.Unloaded += новый RoutedEventHandler(InlineUIContainer_Unloaded_5); } } (код обновлен) У меня есть следующий код, в котором я добавляю текстовые блоки во встроенные динамические абзацы, но пользователь может полностью удалить текстовые блоки, как и любой другой текст.
Я не хочу, чтобы пользователь удалял TextBlock, и я хочу, чтобы он оставался неподвижным.
Обновление. Я попробовал выполнить публикацию об элементе запуска только для чтения, но мне не удалось переместить курсор на соответствующий запуск, и я думаю, что если это сделано правильно, проблема, скорее всего, должна быть решена.< /п>
Мобильная версия