2015-01-18 4 views
0

Я использую богатое текстовое поле, чтобы показывать сообщения пользователей. То, что я хочу сделать, это то, что я хочу показывать сообщения отправителя в правом и приемном сообщениях слева от экрана. Я пробовал различные методы, как изменение направления потока, но не в этом so.Any помощи будет оцененПользовательский интерфейс панели чата для приложения wpf

Вот моя XAML:

<wpfTool:RichTextBox>        
    <FlowDocument> 
     <BlockUIContainer></BlockUIContainer> 
     <Paragraph> 
      <InlineUIContainer></InlineUIContainer> 
      <Run Text="{Binding ChatBlock}" /> 
      <LineBreak/> 
     </Paragraph> 
    </FlowDocument> 
</wpfTool:RichTextBox> 
+2

Почему вы не использовать 2 различных RichTextBox –

+1

@eranotzap Если я пользователь для богатого текстового поля, все сообщения отправителя будут отображаться в tp, и все сообщения получателя будут показаны внизу, не так ли? –

+0

, если вы не отложите их в сторону друг друга. –

ответ

1

Вы должны сделать некоторые шаблонизации как этот

<ItemsControl HorizontalAlignment="Stretch" 
        BorderThickness="2" 
        BorderBrush="Red" 
        Grid.ColumnSpan="2" 
        VerticalAlignment="Stretch" 
        Name="ItemsControl1"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <RichTextBox HorizontalAlignment="Right" 
          VerticalAlignment="Stretch"> 
        <FlowDocument> 
         <Paragraph Name="Para"> 
          <Run Text="{Binding Text}" /> 
         </Paragraph> 
        </FlowDocument> 
       </RichTextBox> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding Type}" Value="Sender"> 
         <Setter TargetName="Para" 
           Property="TextAlignment" 
           Value="Right" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Type}" 
           Value="Receiver"> 
         <Setter TargetName="Para" 
           Property="TextAlignment" 
           Value="Left" /> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Я создал образец проекта here

+0

Спасибо, только то, что мне нужно –

0

на основе this поста; что-то вроде ниже, должны помочь

public static void setRtf(ref RichTextBox rtfBox, string text, bool fromMe = false) 
    { 
     Paragraph p = new Paragraph(); 
     p.FontFamily = rtfBox.FontFamily; 
     p.TextAlignment = fromMe ? TextAlignment.Left : TextAlignment.Right; 
     Run pTxt = new Run(); 
     pTxt.Text = text; 
     p.Inlines.Add(pTxt); 
     rtfBox.Blocks.Add(p); 
    } 
Смежные вопросы