/// <summary> /// Recebe uma Mensagem e cria os TextBlock's para colocar no chat. /// <para> /// Se a mensagem for criada pelo envio de um ficheiro, esta irá ter um comando ativado por Click para pedir /// o ficheiro (download) ao servidor. /// </para> /// </summary> /// <param name="mensagem">Mensagem a mostrar</param> private void DisplayMensagem(Mensagem mensagem) { TabItem mensagemTabItem; if (mensagem.IdDestinatario.Contains("uc")) { // Se for uma mensagem para uma Aula mensagemTabItem = TabItems.Find(tabItem => tabItem.Name == mensagem.IdDestinatario); } else { // Se for uma mensagem privada mensagemTabItem = mensagem.IdDestinatario == MainViewModel.ServerConnectService.UtilizadorLigado.Id.ToString() ? TabItems.Find(tabItem => tabItem.Name == "id" + mensagem.IdRemetente) : TabItems.Find(tabItem => tabItem.Name == "id" + mensagem.IdDestinatario); } if (mensagemTabItem == null) { // Se não existir separador de chat aberto if (mensagem.IdDestinatario.Contains("uc")) { // Vai abrir um separador da UC AddSeparadorChat(mensagem.NomeDestinatario, null, mensagem.IdDestinatario); // Termina a execução da função porque ao fazer "AddSeparadorChat" todas as mensagens vão ser // apresentadas logo a mensagem recebida não pode ser mostrada (senão fica duplicada) return; } // OU Vai abrir um separador do Utilizador AddSeparadorChat(mensagem.NomeRemetente, mensagem.EmailRemetente.Substring(0, mensagem.EmailRemetente.IndexOf("@", StringComparison.Ordinal)), mensagem.IdRemetente.Insert(0, "id")); // Termina a execução da função porque ao fazer "AddSeparadorChat" todas as mensagens vão ser // apresentadas logo a mensagem recebida não pode ser mostrada (senão fica duplicada) return; } ScrollViewer destinatarioScrollViewer = (ScrollViewer)mensagemTabItem?.Content; ItemsControl destinatarioItemsControl = (ItemsControl)destinatarioScrollViewer?.Content; StackPanel destinatarioStackPanel = (StackPanel)destinatarioItemsControl?.Items.GetItemAt(0); TextBlock mensagemTextBlock = new TextBlock { FontSize = 15, TextWrapping = TextWrapping.Wrap }; Thickness mensagemTextBlockThickness = mensagemTextBlock.Margin; mensagemTextBlockThickness.Top = 10; mensagemTextBlock.Margin = mensagemTextBlockThickness; if (MainViewModel.ServerConnectService.UtilizadorLigado.Id.ToString() == mensagem.IdRemetente) { mensagemTextBlock.Inlines.Add(new Run(mensagem.NomeRemetente + ":") { FontWeight = FontWeights.Bold, TextDecorations = TextDecorations.Underline }); } else { mensagemTextBlock.Inlines.Add(new Run(mensagem.NomeRemetente + ":") { FontWeight = FontWeights.Bold }); } mensagemTextBlock.Inlines.Add(" "); if (!mensagem.IsFicheiro) { mensagemTextBlock.Inlines.Add(mensagem.Conteudo); } else { // Adiciona o Comando (ativado por Click) para pedir o ficheiro mensagemTextBlock.Inlines.Add(new Run(mensagem.Conteudo) { TextDecorations = TextDecorations.Underline, Foreground = Brushes.Blue }); mensagemTextBlock.Cursor = Cursors.Hand; mensagemTextBlock.InputBindings.Add(new MouseBinding { Gesture = new MouseGesture(MouseAction.LeftClick), Command = PedirFicheiroCommand, CommandParameter = mensagem.Conteudo }); } destinatarioStackPanel?.Children.Add(mensagemTextBlock); TextBlock dataHoraEnvioTextBlock = new TextBlock { FontSize = 9, Text = mensagem.DataHoraEnvio }; destinatarioStackPanel?.Children.Add(dataHoraEnvioTextBlock); destinatarioScrollViewer?.ScrollToBottom(); }