ControlTemplate
을 사용자 정의하는 데 문제가 있습니다. TextBox
입니다. 아이디어는 텍스트 길이, 글꼴 크기 등과 같이 최대한 유연한 상태를 유지하면서 최대한 적은 사용자 상호 작용을 통해 줄 지어 용지에 텍스트를 자동으로 인쇄하는 것입니다.스크롤을 제한하기 위해 TextBox ControlTemplate을 수정하면 런타임에 속성 설정이 올바르지 않습니다.
이렇게하려면 한 가지 설정이 인쇄 된 선 (종이에 나타나는 선의 위/위쪽). 텍스트 상자 LineHeight
을 변경하면 텍스트 아래에 공백이 추가되고 그 위에는 공백이 없으므로 텍스트 아래쪽에있는 공백을 사용하여 텍스트를 아래쪽으로 변환합니다.
이렇게하면 지정된 LineHeight가 텍스트 상자 안의 남아있는 보이는 공간보다 커질 때마다 문제가 발생합니다. 실수로 행의 맨 아래로 스크롤하여 텍스트를 패딩 된 영역으로 위로 스크롤하여 사라지게 할 수 있습니다.
이 문제를 해결하려면 MouseWheel/PgUp/PgDwn 스크롤을 텍스트 상자 내부에서 방지하거나 맨 위 대신 줄의 아래쪽 가장자리를 따라 텍스트를 렌더링하는 방법을 알아야합니다. 스눕 사용
, 난 TextBox 컨트롤 누구 CanContentScroll 속성 ScrollViewer
로부터 ParentTemplate 의해 결정되는 ScrollContentPresenter
갖는다 알았다. 응용 프로그램이 실행 중일 때 스누프에서 CanContentScroll
의 검사를 취소하면 스크롤 기능이 비활성화되고 원하는대로이 동작을 방지하지만 어떤 이유로 인해 템플릿에 CanContentScroll = False
을 지정하면 작동하지 않습니다. 그것은 True
입니다.
XAML은 :
<TextBox.Style>
<Style TargetType="TextBoxBase">
. . .
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<theme:ListBoxChrome x:Name="Bd" . . . >
<ScrollViewer x:Name="PART_ContentHost"
CanContentScroll="False"/>
</theme:ListBoxChrome>
. . .
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
스타일은 스크롤을 비활성화 된 ControlTemplate에 하나의 변화와 마이크로 소프트의 WPFThemes/Aero.NormalColor.xaml에서 직접 올려진다. 배경 색상과 같은 다른 (생략 된) 설정자에 대한 변경이 효과적이었습니다. TextBox에서 스타일을 직접 지정 했으므로 TextBox는 다른 곳에서는 사용되지 않으며 내재 된 스타일보다 먼저 사용되는 스타일을 가정하기 때문에 TextBox에 직접 지정했습니다. 그러나이 작업을 수행 할 수있는 적절한 위치가 아닐 수도 있습니다.
누구나 내가 잘못하고있는 부분을 지적하거나 줄에서 텍스트가 렌더링되는 위치를 변경할 수 있는지 여부를 확인할 수 있습니까?
당신에게
편집 감사합니다 다음은이 텍스트 상자가 실제로는 각하는 몇 가지 질문을 가지고 대출 또는 허가 응용 프로그램으로 종이 양식이 있다고 가정
을하고 무엇을 더 잘 설명입니다 답을 쓸 수있는 3 개의 미리 인쇄 된 선. 텍스트 박스 :
- 가있는 크기/
- 3 개 라인
- 를 포함하도록 설정되고, 전체 응답 영역을 덮도록 위치가 사용자의 폰트 크기, 정렬, 서체 옵션을 제공
- 자동 공간 선
LineHeight
조정 균일하게 설정하고Padding
을 설정하면 인쇄 된 줄 바로 위의 텍스트가 배치됩니다. - 텍스트 입력이 예상보다 길더라도 오버플로가 허용되지 않습니다.줄의 수는 배수로 증가하고 (예 : 두 배, 세 배 등) 글꼴 크기는 제공된 공간에 모든 내용을 깔끔하게 인쇄하려고 조정됩니다 (예 : 인쇄 된 줄이없는 텍스트 줄 없음)
실제로 이것은 매우으로 잘 작동하며 마치 누군가가 이전 Selectric으로 손으로 만든 것처럼 깔끔한 모양을 만듭니다. 유일한 문제는이 우발적 인 스크롤링 문제가 잠시 발생한다는 것입니다.
몇 마디, 무엇이 있어야하며 어떻게 작동해야합니까? –
예. 자세한 내용으로 질문을 수정하겠습니다. – Tom
예. 텍스트 상자 내에서 스크롤을 사용하지 않도록 설정하거나 텍스트 맨 위에 줄 바꿈 대신 텍스트 서식을 지정하는 방법을 배우고 싶습니다. Thanks – Tom