2014-10-09 79 views
0

我正在制作演示聊天应用程序,并且我想要的是允许用户选择位于listview数据模式内的聊天消息。 有什么办法可以让用户复制邮件吗?另外我想在消息中显示url作为可点击的超链接。如何在列表视图中启用复制项目

<DataTemplate x:Key="ChatTemplate"> 
    <Grid HorizontalAlignment="Stretch"> 
     <Grid HorizontalAlignment="Right" > 
      <Border BorderBrush="Orange" BorderThickness="1" CornerRadius="10" HorizontalAlignment="Left" Height="auto" VerticalAlignment="Top"> 

     <Grid VerticalAlignment="Stretch"> 

      <TextBox Grid.Row="1" Margin="5" MinHeight="30" IsReadOnly="True" Text="{Binding message}" TextWrapping="Wrap" Foreground="Black" FontSize="14" /> 
        </Grid> 
       </Border> 
      </Grid> 
     </Grid> 
</DataTemplate> 

<ListView 
x:Name="chatListView" 
AutomationProperties.AutomationId="chatListView" 
AutomationProperties.Name="Items" 
Grid.Row="2" 
Margin="120,0,0,0" 
IsItemClickEnabled="False" 
ItemTemplate="{StaticResource ChatTemplate}" 
SelectionMode="None" 
IsSwipeEnabled="True"> 
</ListView> 

在此先感谢。

回答

0

要设置的文字:Clipboard.SetText(“富巴”)

要检查剪贴板中包含文本:Clipboard.ContainsText(“富巴”)

没有方法来获取剪贴板文本.GetText()导致安全异常

+0

我想要的是我已经填充了以前的聊天列表视图,现在如果用户想复制任何聊天,他/她应该能够做到这一点。默认情况下,listview不允许选择数据模式内的文本框中的聊天 – Dishant 2014-10-09 11:54:22

+0

使用列表框的tap事件并使用clipboard.settext(“listboxm selected item value etc”)@zee它会复制你想要的任何内容 – SD7 2014-10-09 11:56:40

+0

谢谢我会尝试。另外,我想让用户灵活选择,就像我们通常在文字处理中所做的那样,而不是复制所有内容。 – Dishant 2014-10-09 12:32:42

0

您是否尝试使用Windows Phone Clipboard。复制所选文本?

这一个会有所帮助。

Tap button to copy text?

+0

感谢您的回复,但我正在使用Windows8.1应用程序,因此您的链接无用。 – Dishant 2014-10-10 10:12:42

0

如果我理解正确的话,我会复制/参考选择绑定对象,并将其存储在别处。该消息的文本将是该对象的一个​​属性,因此可以在其他地方传输,也可以稍后通过剪贴板复制。因此,举例来说,你可能在做类似的事情这已经:

public class Message 
{ 
    public string strMessageUuid { get; set; } 
    public string strUserUuid { get; set; } 
    public string strMessageSender { get; set; } 
    public string strMessageText { get; set; } 
    public bool booMessageSaved { get; set; } 
} 

那么你的邮件列表绑定到你的列表框:

ObservableCollection<Message> obsMessages = new ObservableCollection<Message>(); 
lstChatMessages.ItemsSource = obsMessages; 

所以,当用户点击一个ListItem你可以得到相关的对象:

private void lstChatMessages_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (e.AddedItems.Count > 0 && lstChatMessages.SelectedItem != null) 
    { 
     Message objMessage = (Message)e.AddedItems[0]; 
     //Now you can do what you want with the message, eg 
     MessageBox.Show(objMessage.strMessageText); 
    } 
} 

所以,你可以选择的信息存储在存储信息的一个新的列表,如

List<Message> lstUserSavedMessages = new List<Message>(); 
lstUserSavedMessages.Add(objMessage); 

然后将列表存储在某处。或者你可以得到你想要的属性和存储,或者只是存储消息UUID和检索从主列表中的相关信息,或添加的保存/收藏最多的属性,然后在该过滤器,例如

var savedmessages = obsMessages.Where(a => a.booMessageSaved == "true" && a.strUserUuid == "exampleuseridvalue"); 

在其他地方,你可以显示已保存的聊天记录给用户,并让他们复制到剪贴板等,如果他们需要,或具有电子邮件功能,将发送消息正文他们等。

希望这可以帮助。

[编辑]

,添加一个网址的邮件中可点击的链接只是在你的XAML添加超链接按钮ListBox的DataTemplate中如:

<ListBox Name="lstChatMessages" Height="550" Margin="0,0,0,0"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <!-- Your other layout items here --> 
         <HyperlinkButton NavigateUri="{Binding urlMessageUrl}" TargetName="_blank" Content="{Binding strContent}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
</ListBox> 

显然,你需要相应的Message对象中的属性。