using Markdig.Syntax.Inlines; using Markdig; using System.Text.RegularExpressions; using Markdig.Renderers.Html; using Markdig.Syntax; using System.Collections.ObjectModel; using NotesDataAnalyst.NoteContent; namespace NotesDataAnalyst; public partial class NoteDetailPage : ContentPage { private readonly Note _note; public NoteDetailPage(Note note) { InitializeComponent(); _note = note; // Устанавливаем данные заметки в элементы управления titleLabel.Text = _note.Title; //textLabel.Text = _note.Text; BindingContext = _note; if (!string.IsNullOrEmpty(_note.Image)) { imageView.Source = _note.Image; imageView.IsVisible = true; } ApplyThemeToHtml(); // Применяем тему к HTML-контенту WebView } /// //////////////////////////////////// Работаем с темой Webwiev private void ApplyThemeToHtml() { bool isDarkTheme = Application.Current.RequestedTheme == AppTheme.Dark; string backgroundColor = isDarkTheme ? "#212121" : "#FFFFFF"; string textColor = isDarkTheme ? "#FFFFFF" : "#000000"; // Формируем HTML-контент с CSS-стилями string htmlContent = $@"
{_note.FormattedText} "; contentWebView.Source = new HtmlWebViewSource { Html = htmlContent }; } protected override void OnAppearing() { base.OnAppearing(); Application.Current.RequestedThemeChanged += OnRequestedThemeChanged; } protected override void OnDisappearing() { base.OnDisappearing(); Application.Current.RequestedThemeChanged -= OnRequestedThemeChanged; } private void OnRequestedThemeChanged(object sender, AppThemeChangedEventArgs e) { ApplyThemeToHtml(); // Перезагружаем HTML с новой темой } /// ////////////////////////////////////////////////////////// // Обработчик навигации WebView для перехвата ссылок private async void OnWebViewNavigating(object sender, WebNavigatingEventArgs e) { if (e.Url.StartsWith("note:")) { e.Cancel = true; // Отменяем переход // Извлекаем Id заметки из ссылки string noteId = e.Url.Replace("note:", ""); await NoteLinkManager.NavigateToNoteByIdAsync(noteId, Navigation); } } // Обработчик кнопки "Редактировать" private async void OnEditButtonClicked(object sender, EventArgs e) { // Вместо передачи _note.FilePath передаем сам объект _note await Navigation.PushAsync(new EditorPage(_note)); } // Обработчик кнопки "Удалить" private async void OnDeleteButtonClicked(object sender, EventArgs e) { bool confirm = await DisplayAlert("Подтверждение", "Вы уверены, что хотите удалить эту заметку?", "Удалить", "Отмена"); if (confirm) { // Удаляем файл заметки // if (File.Exists(_note.FilePath)) // { //Удаление из БД пока не работает // await Task.Run (() => App.DbContext.DeleteNote(_note)); // File.Delete(_note.FilePath); // Удаляем заметку из базы данных App.Database.DeleteNote(_note); await DisplayAlert("Оповещение", "Файл удален", "Ok"); // Отправляем сообщение для обновления списка заметок MessagingCenter.Send(this, "NoteDeleted", _note); // Возвращаемся на главную страницу и обновляем список await Navigation.PushAsync(new MainPage()); // } // else { await DisplayAlert("Ошибка", "Запись не может быть удалена, так как файл не найден", "Ok"); } } } }