문제

간단한 채팅 응용 프로그램을 작업 중입니다. 현재 메시지는 이와 같은 사용자 정의 스타일의 목록 상자 (단순화 된 XAML)에 묶여 있습니다.

<ListBox ItemsSource="{Binding MessageCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

이제 이미지 (그래픽 스마일)를 표시된 메시지 텍스트에 넣을 수 있습니다. TextBlock (또는 다른 standart 구성 요소)을 사용하여이를 달성 할 수있는 방법이 있습니까? 아니면이를 위해 특별한 컨트롤을 사용해야합니까?

미리 감사드립니다

도움이 되었습니까?

해결책

실제로 이미지를 원한다면 내부에 텍스트 (이모티콘과 같은), 당신은 일을해야 할 것입니다. 이것은 실제로 사용자 컨트롤을 원할 몇 번 중 하나 인 것 같습니다. 그 점은 이모티콘 값을 찾고 데이터 템플릿을 즉시 구축하는 텍스트를 스캔하는 것입니다.

XAML에서 할 수있는 일은 코드에서 할 수있는 모든 것을 기억하십시오. 그래서 내가 생각하고있는 코드는이 일반적인 아이디어를 따를 것입니다.

  1. 이모티콘 값에 대한 텍스트를 스캔하고 데이터 요소에 대한 값 목록을 만듭니다.
  2. DockPanel을 만듭니다.
  3. 목록의 foreach 요소, 텍스트 블록 또는 이미지를 추가하십시오 (값 기준).
  4. 이를 도크 패널에 설정하십시오.

나는 이와 같은 것이 실제로 당신이 찾고있는 것이라고 생각하지만, 이미지 만 원한다면 ValueConverter 제안이 작동합니다.

다른 팁

InlineUicontainer 만 사용하십시오.

<TextBlock TextWrapping="Wrap">
    <Run>Some text.</Run>
    <InlineUIContainer>
        <Image Source="http://sstatic.net/stackoverflow/img/apple-touch-icon.png" Height="20"></Image>
    </InlineUIContainer>
    <Run>Some more text.</Run>
</TextBlock>

TextBlock의 내용은 항상 일련의 인라인 일 뿐이므로 InlineUicontainer를 사용해야합니다. 이 컨테이너를 텍스트 블록에서 이미지가 나타나기를 원하는 곳에서 텍스트 실행과 번갈아 가면서 텍스트 블록의 인라인 중 하나로 삽입 할 수 있습니다. 메시지를 구문 분석 할 수 있으며 동시에 텍스트 블록의 인라인 모음에 찾은 토큰 (텍스트 또는 이미지)을 계속 추가하십시오.

값 변환기를 사용하여 텍스트를 다른 유형으로 변환 할 수있는 텍스트 또는 스마일면으로 구성된 세그먼트 목록이있는 다른 유형으로 변환 할 수 있습니다 (나타나는 순서대로).

그런 다음 데이터 템플릿을 사용하여 해당 새 유형에 바인딩하고 텍스트와 스마일면을 적절하게 표시 할 수 있습니다.

나는 또한 최근 에이 문제를 겪었고 이것을 극복합니다.

itemspaneltemplate에 Wrappanel이있는 Itemscontrol이 포함 된 Listbox 항목 회화를 작성한 다음 내 문자열을 모든 논리를 수용하는 IvalueConverter와 함께 Itemscontrol의 항목 소스에 바인딩합니다.

단어와 쿼리/쿼리/이모티콘 문자열, 하이퍼 링크 등을 검색하고 텍스트 블록, 이미지, 하이퍼 링크, 버튼 요소를 만들고 값과 이벤트 핸들을 설정하십시오.

함수에서 목록을 만듭니다u003CUIElement> 생성 한 컨트롤로 목록을 채우고 IvalueConverter의 변환 함수의 개체로 목록을 반환합니다.

당신은 거기에 Wrappanel이 있기 때문에 포장을 완료합니다.

텍스트 블록 대신 이미지 요소를 사용하고 변환기를 사용하여 텍스트 값을 스마일 이미지에 매핑하십시오.

<ListBox ItemsSource="{Binding MessageCollection}">
<ListBox.ItemTemplate>
    <DataTemplate>
        <Image Source="{Binding Text, Converter={StaticResource MyImageConverter}}"/>
    </DataTemplate>
</ListBox.ItemTemplate>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top