Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МГ_Кузнецов_ABCN2_final.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Пространство имён Log

Log.xaml

<UserControl x:Class="CN2.UC.Log.Log"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:local="clr-namespace:CN2.UC.Log"

mc:Ignorable="d">

<UserControl.Resources>

<Image x:Key="SaveImage" Source="../../Images/Save_16x.png"/>

</UserControl.Resources>

<Grid>

<Menu x:Name="menu" Height="22" VerticalAlignment="Top">

<Label Content="Журнал" Padding="0"/>

<Button x:Name="buttonSaveLog" Margin="0,2,0,0" Content="{StaticResource SaveImage}" Height="16" Width="20" Click="buttonSaveLog_Click" ToolTip="Сохранить журнал в файл"/>

</Menu>

<ScrollViewer x:Name="scrollViewer" Margin="0,22,0,0">

<TextBlock x:Name="logTextBlock" TextWrapping="Wrap" Text="" Background="White"/>

</ScrollViewer>

</Grid>

</UserControl>

Log.xaml.sc

using System;

using System.Collections.Generic;

using System.IO;

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;

using Microsoft.Win32;

namespace CN2.UC.Log

{

/// <summary>

/// Interaction logic for Log.xaml

/// </summary>

public partial class Log : UserControl

{

public Log()

{

InitializeComponent();

}

/// <summary>

/// Очищает содержимое журнала.

/// </summary>

public void Clear()

{

logTextBlock.Text = string.Empty;

}

public string CorrectMessage(string message)

{

return message.EndsWith(Environment.NewLine) ? message : message + Environment.NewLine;

}

private void WriteColor(string message, Brush brush)

{

logTextBlock.Dispatcher.Invoke(

new Action(

() => logTextBlock.Inlines.Add(new Run( /*DateTime.Now + ": " + */CorrectMessage(message)) {Foreground = brush})));

scrollViewer.Dispatcher.Invoke(new Action(() => scrollViewer.ScrollToBottom()));

}

public void Write(string message)

{

WriteColor(message, Brushes.Black);

}

public void WriteOfftop(string message)

{

WriteColor(message, Brushes.Gray);

}

public void WriteError(string message)

{

WriteColor(message, Brushes.Red);

}

public void WriteSuccess(string message)

{

WriteColor(message, Brushes.Green);

}

public void WriteWarning(string message)

{

WriteColor(message, Brushes.YellowGreen);

}

public void WriteSection(string message)

{

WriteColor(message, Brushes.Blue);

}

public void WriteSubSection1(string message)

{

WriteColor(message, Brushes.CornflowerBlue);

}

public void WriteSubSection2(string message)

{

WriteColor(message, Brushes.DeepSkyBlue);

}

private void buttonSaveLog_Click(object sender, RoutedEventArgs e)

{

try

{

SaveFileDialog sfd = new SaveFileDialog()

{

Title = SerializationData.SaveLogFileDialogTitle,

Filter = SerializationData.LogFileDialogFilter,

FileName = "log" + DateTime.Now.ToFileTime()

};

Nullable<bool> sfdResult = sfd.ShowDialog();

if (sfdResult != null && sfdResult == true)

{

using (StreamWriter logFile = new StreamWriter(sfd.FileName))

{

logFile.Write(logTextBlock.Text);

}

}

}

catch (Exception ex)

{

WriteError(ex.Message);

}

}

}

}