2012-03-13 2 views
2

(readonly) DataGrid에 서식있는 텍스트를 표시하고 싶습니다. 기본 스타일 (굵게, 기울임 꼴)과 하이퍼 링크가 포함되어야합니다. 예를 들어 그리드 셀은 DataGrid의 사용자 정의 Html TextBlock

<a>Here</a> and <a>also here</a> you can find <b>stuff<b>
과 같은 형식이어야하며 HTML 인 것처럼 렌더링합니다. 물론 모든 것이 바인딩 될 수 있도록 데이터가 데이터베이스에서 나옵니다.

적절한 템플릿 또는 스타일을 패치 - 업 한 후, 나는 포기하고 사용자 정의 컨트롤을 만들려고했습니다. 컨트롤은 매우 간단했습니다.

public class SmartTextBlock : TextBlock 
{ 
    public static readonly DependencyProperty HtmlProperty = DependencyProperty.Register("Html", typeof(string), typeof(SmartTextBlock), new UIPropertyMetadata(null, new PropertyChangedCallback(OnHtmlChanged))); 

    public string Html 
    { 
     get { return GetValue(HtmlProperty) as string; } 
     set { SetValue(HtmlProperty, value); } 
    } 

    static void OnHtmlChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) { 
     SmartTextBlock control = target as SmartTextBlock; 
     control.createParts(e.NewValue as string); 
    } 

    void createParts(string text) { 
     Inlines.Clear(); 
     /* parse text and add some Inlines */ 
    } 
} 

잘되고 컨트롤이 멋지게 표시됩니다. 그리드에 부드럽게 추가되었습니다.

<DataGridTemplateColumn Width="*" Header="Line"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <controls:SmartTextBlock Html="{Binding Path=Html}" TextWrapping="Wrap" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

그리드의 크기를 조정하거나 스크롤하려고 할 때 문제가 발생합니다. 그런 다음 전체 창이 깜박이기 시작하고 응용 프로그램이 멈 춥니 다! 이것은 매번 발생하지는 않지만 오랫동안 시도해 보면 확실히 시작할 것입니다.

어떤 생각이 들었을 지 모릅니다. 어떤 명백한 실수를 간과합니까?

+0

as advice - 직접 작성한 메소드에 중단 점을 넣으십시오. 크기를 조정하고 어떤 메소드가 호출되는지보십시오. – stukselbax

+0

잠을 자고 나서 몇 가지 아이디어가있었습니다. 처음에는 너비 = "*"에서 너비 = "220"로 열 너비를 변경했습니다. 좋은 소식은 더 이상 깜박 거리지 않고 (무한 루프의 렌더링) 매달린 것입니다. 따라서 DataGrid의 내부 레이아웃 논리가 있어야합니다. 게다가 DataGrid에 HeadersVisibility = "Column"이 있지만 일부 행 (무작위로)이 파란색 행 헤더를 가져옵니다! 내 문제는 DataGrid의 결함 (빈약 한)에 대한 이해에서 비롯된 것 같습니다. ListView로 바꾸어보세요. – BranS

답변

0

마침내 문제를 해결할 수있었습니다. 그것은 DataGrid 자체에서 시작된 것 같습니다!

DataGrid는 HeadersVisibility="Column"이고 설정하면 RowHeaderWidth="0" 문제가 사라졌습니다.

Dunno는 이것이 주요 원인 이었지만 확실히 해결했습니다.