2014-10-09 5 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> 

미리 감사드립니다. Clipboard.SetText ("foo는 바") 클립 보드에 텍스트가 포함 된 경우

확인하려면 : Clipboard.ContainsText ("foo는 바")를

텍스트 클립 보드를 얻을 수있는 방법

답변

0

텍스트를 설정하려면 .GetText()가 보안 예외가 발생합니다.

+0

내가 원하는 것은 이전 채팅으로 listview를 채우고 이제 사용자가 채팅 할 수 있어야하는 것보다 채팅을 복사하려고하는 경우입니다.기본적으로 listview는 데이터 시트 – Dishant

+0

의 텍스트 상자에있는 텍스트 상자에서 listbox의 탭 이벤트를 사용하고 clipboard.settext ("listboxm selected item value etc")를 사용하는 채팅을 선택할 수 없습니다. @zee 원하는 항목을 복사합니다. – SD7

+0

감사합니다. 나는 그것을 시도 할 것이다. 또한 모든 것을 복사하는 대신 워드 프로세서에서 일반적으로하는 것처럼 사용자가 선택할 수있는 유연성을 제공하고 싶습니다. – Dishant

0

Windows Phone Clipboard을 사용하여 선택한 텍스트를 복사하려고 했습니까?

이 정보가 도움이 될 것입니다.

Tap button to copy text?

+0

답장을 보내 주셔서 감사합니다. 그러나 Windows8.1 응용 프로그램에서 작업 중이므로 링크가 유용하지 않습니다. – Dishant

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를 저장하고 마스터 목록에서 관련 메시지를 검색하거나/저장 favourited의 속성을 추가하고 해당 필터링 할 수 있습니다 예를 들어

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

다른 곳에서는 저장된 채팅 내용을 사용자에게 표시 할 수 있으며 필요한 경우 클립 보드 등으로 복사하거나 메시지 본문을 보낼 전자 메일 기능을 사용할 수 있습니다.

희망이 있습니다.

[편집]

그냥 목록 상자의 DataTemplate을의 예에 XAML에서 하이퍼 링크 버튼을 추가 메시지에서 클릭 가능한 링크로 URL을 추가하려면 :

<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> 

은 분명히 당신이 대응이 필요한 것 메시지 개체의 속성