1
TextBox 템플릿을 만들려고하고 템플릿에 ScrollViewer를 포함해야합니다. 기본적으로 스크롤해야하는 내용 (줄 번호 등)을 추가하고 싶습니다. 일반 텍스트 텍스트 상자에 대한 기본 템플릿은 다음과 같이이다 : 나는 국경에있는 ScrollViewer에서 ContentElement에를 변경하는 경우Silverlight - TextBox 템플릿에서 ScrollViewer 사용
<Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="1" Opacity="1">
<Grid>
<Border x:Name="ReadOnlyVisualElement" Background="#5EC9C9C9" Opacity="0"/>
<Border x:Name="MouseOverBorder" BorderBrush="Transparent" BorderThickness="1">
<ScrollViewer x:Name="ContentElement" BorderThickness="0" IsTabStop="False" Padding="{TemplateBinding Padding}"/>
</Border>
</Grid>
</Border>
는, 예를 들어, 텍스트 상자가 정상적으로 작동 - 난 그냥 스크롤 기능을 잃게됩니다. 이제 ScrollViewer로 ContentElement를 래핑하면 더 이상 캐럿과 선택 항목이 표시되지 않습니다. 입력하면 계속 업데이트됩니다.
<Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="1" Opacity="1">
<Grid>
<Border x:Name="ReadOnlyVisualElement" Background="#5EC9C9C9" Opacity="0"/>
<Border x:Name="MouseOverBorder" BorderBrush="Transparent" BorderThickness="1">
<ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" >
<Border x:Name="ContentElement" BorderThickness="0" Padding="{TemplateBinding Padding}" />
</ScrollViewer>
</Border>
</Grid>
</Border>
왜 이런 일이 발생하고 어떻게 해결할 수 있습니까?
Reflector를 사용하여 ContentElement를 ScrollViewer로 사용하려고했지만 실제로는 스크롤에 영향을 주어야한다고 판단했습니다. ContentElement가 ScrollViewer가 아닌 경우 TextBox는 예상대로 작동합니다 (캐럿 및 선택 항목). 문서에 따르면 모든 FrameworkElement가 될 수 있습니다. ContentElement가 ScrollViewer 안에 래핑 된 경우 문제가 발생하지만 이유를 파악할 수 없습니다. – vladhorby