2011-09-30 2 views
2

OnRender 메서드를 재정의하는 사용자 지정 TextBox가 있습니다. 안타깝게도 격자에 143-145 TextBox를 추가 할 때 OnRender이 제대로 작동하지 않습니다.OnRender 메서드가 144 개 이상의 컨트롤에서 작동하지 않습니다.

이것은 160 개의 TextBox가있는 창을 wpf 디자이너에서와 같이 보입니다. 각 TextBox는 OnRender 메서드에서 테두리 브러시를 빨간색으로 설정합니다. 텍스트 상자의 마지막 열에 대해서는 OnRender이 더 이상 작동하지 않습니다.

render test example http://s3.postimage.org/id6jvq09n/render_Test_Example.png

문제

가 WPF 디자이너에 바인딩되지 않으며, 동일한 런타임에 발생합니다. 재미있게도, 디자이너 내에서 하나의 구성 요소를 삭제하거나 런타임에 렌더링 된 후에는 다른 모든 컨트롤이 갑자기 작동합니다.

예제 코드 :

MytextBox.cs
RenderTestPanel.xaml
RenderTestPanel.xaml.cs

+2

정말 많은 TextBox를 표시해야합니까? TextBlocks를 사용하고 사용자가 셀을 "편집"할 때만 TextBox를 표시하십시오. TextBlocks은 훨씬 가벼운 무게입니다. –

+0

Chibacity의 덧글 외에도 Style을 사용하여 BorderBrush를 Red로 설정하는 것이 어떻습니까? 또는 Constructor에서 브러시를 Red로 설정하면 여러 번 호출되는 OnRender 대신 한 번만 설정됩니다. – Rachel

+1

@chibacity 예, 많은 TextBox를 표시해야합니다. 이전 시스템의지도를 C# 패널로 변환하는 중입니다. 이전지도 중 일부는 예를 들어 10x15 수정 가능 텍스트 필드의 격자를 포함합니다. 텍스트 필드로 만든 테이블과 같습니다. – Markus

답변

0

귀하의 접근 방식은 chibacity에 의해 제안 된 것이어야한다. 이러한 유형의 동작은 표준이며 WPF와 함께 제공되는 DataGridTextColumn에서도 사용됩니다. 은 MSDN에서 : 의견에 많은 다른 사용자에 의해 제안

DataGridTextColumn creates a TextBlock element in the non-editing mode and a TextBox element in the editing mode.

또한, 당신은 컨트롤의 시각적 모양을 조정하지 재정 OnRender한다. WPF에서 컨트롤의 시각적 모양에 대한 변경은 컨트롤의 Style 및/또는 Template을 조정하여 수행 할 수 있습니다.

<Style TargetType="TextBox"> 
    <Setter Property="BorderBrush" Value="Red" /> 
</Style> 

당신은 "파생 무시"당신이 컨트롤의 기능 및/또는 목적을 확장 할 때 아무것도 귀하의 예제에 없다한다 : 당신의 OnRender 재정과 동일한 외관 변화에 다음과 같은 스타일의 결과 그것은 당신이하고있는 일을 제안합니다.

또한 RenderTestPanel.xaml은 WPF에서 제공하는 데이터 격자를 만드는 것만을 의미합니다. 바로 DataGrid을 사용하여 DataGridTextColumn으로 스타일을 지정하면 코드가 적게 들고 XAML로 목표를 달성 할 수 있습니다.

+0

DataGrid를 사용할 수 없습니다. 기존 콘솔 응용 프로그램을 C#으로 변환하고 있습니다. 이러한 응용 프로그램에는 데이터 격자/테이블이 없기 때문에 개발자는 텍스트 필드 배열을 사용하여 테이블을 만들었습니다. 나는 textboxes/textfields를 사용해야한다. 위의 설명에서 설명한 것처럼 테두리가 항상 빨간색이 아니기 때문에 OnRender 내부에 테두리 색을 설정했습니다. wpf 디자이너 내에서 사용자는 디자인 모드와 런타임 모드를 전환 할 수 있습니다. 디자인 모드에서 읽기 전용 필드는 빨간색 테두리로 표시되고 수정 가능 필드는 녹색 테두리로 표시됩니다. – Markus

+0

런타임 모드에서 읽기 전용 필드는 테두리가없고 수정할 수있는 필드는 약간 눈에 띄는 테두리가 있습니다. 이것은 OnRender가 없어도 가능하지만 경계 이상의 것입니다. OnRender없이 전체 텍스트 필드를 채우는 밑줄을 그릴 수 있습니까? 이것은 스타일로 할 수 있습니까? 또한 디자인 및 런타임보기에서 다르게 보이는 다른 속성도 있습니다. 스타일을 사용하여 이것을 수행하는 방법? Rachel은 방아쇠를 제안했지만, 일단 내가 일하러 돌아 오면 위로 올려야 할 것이 있습니다. – Markus

관련 문제