wpf 更改 textbox 模版后 光标不跟随文本

携丶七月 2016-05-09 11:55:40
如题,我更改textbox 控件模版后,在文本框内输入值,当输入的值超过textbox 本身长度后,正常情况应该是光标随着文本往后移动,但是我遇到的问题是文本 可以输入进去,但是看不见光标,只能手动按←把光标找回来再按→回到文本的最后面,才会变的正常,特别的不方便。
更改后的模版

<Style TargetType="TextBox">
<Setter Property="Background" Value="{StaticResource TextBoxBackgroundBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource TextBoxBorderBrush}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Foreground" Value="{StaticResource TextBoxFontBrush}" />
<Setter Property="FontFamily" Value="{StaticResource DefaultFontFamily}" />
<Setter Property="FontSize" Value="{StaticResource TextBoxFontSize}" />
<Setter Property="SelectionBrush" Value="{StaticResource InputSelectionBrush}" />
<!--<Setter Property="SelectionForeground" Value="{StaticResource InputSelectionForegroundBrush}" />-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid x:Name="RootElement">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" To="0.55" Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="DisabledVisualElement" />
<DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="(UIElement.Opacity)"
Storyboard.TargetName="PART_ContentHost" />
</Storyboard>
</VisualState>
<VisualState x:Name="ReadOnly">
<Storyboard>
<DoubleAnimation Duration="0" To="0.55" Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="ReadOnlyVisualElement" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="FocusVisualElement"
Storyboard.TargetProperty="(FrameworkElement.Opacity)" To="1" />
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused" />
</VisualStateGroup>
<VisualStateGroup x:Name="ValidationStates">
<VisualState x:Name="Valid" />
<VisualState x:Name="InvalidUnfocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="ValidationErrorElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="InvalidFocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="ValidationErrorElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen"
Storyboard.TargetName="validationTooltip">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Boolean>True</System:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
Opacity="1">
<Grid>
<Border x:Name="ReadOnlyVisualElement" Background="{StaticResource ReadOnlyBrush}"
Opacity="0" />
<ScrollViewer x:Name="PART_ContentHost" Foreground="{TemplateBinding Foreground}"
BorderThickness="0" Margin="1" Padding="{TemplateBinding Padding}" />
</Grid>
</Border>
<Border x:Name="OuterHighlight" BorderBrush="{StaticResource ControlOuterHighlightBrush}"
BorderThickness="1"/>
<!--真正用的是图片,但是环境无法模拟,只好用Border-->
<!--<Image Grid.Column="0" Source="/HECTouchResource;component/Images/Questionnaire/line3.png"
Height="2" Stretch="Fill" VerticalAlignment="Bottom" Margin="0,0,0,0">
</Image>-->
<Border x:Name="DisabledVisualElement" Background="{StaticResource DisabledBrush}"
IsHitTestVisible="False" Margin="1" Opacity="0" />
<Rectangle x:Name="FocusVisualElement" Opacity="0"
Stroke="{StaticResource FocusVisualBrush}"/>
<Border x:Name="ValidationErrorElement" BorderBrush="{StaticResource ErrorBrush}" BorderThickness="1"
CornerRadius="3" Visibility="Collapsed">
<ToolTipService.ToolTip>
<ToolTip x:Name="validationTooltip"
DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" Placement="Right"
PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
Template="{StaticResource ValidationToolTipTemplate}">
<ToolTip.Triggers>
<!--<EventTrigger RoutedEvent="Canvas.Loaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsHitTestVisible"
Storyboard.TargetName="validationTooltip">
<DiscreteObjectKeyFrame KeyTime="0" Value="True" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>-->
</ToolTip.Triggers>
</ToolTip>
</ToolTipService.ToolTip>
<Grid Background="Transparent" HorizontalAlignment="Right" Height="12" Margin="1,-4,-4,0"
VerticalAlignment="Top" Width="12">
<Path Data="M 1,0 L6,0 A 2,2 90 0 1 8,2 L8,7 z" Fill="{StaticResource ErrorBrush}"
Margin="1,3,0,0" />
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

问题截图:

真实的值:
1234567890123
想要的效果:
...全文
861 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍过鸡年 2016-06-15
  • 打赏
  • 举报
回复

<ScrollViewer x:Name="PART_ContentHost"
    Focusable="false"
    HorizontalScrollBarVisibility="Hidden"
    VerticalScrollBarVisibility="Hidden" />
龍过鸡年 2016-06-15
  • 打赏
  • 举报
回复
名为 PART_ContentHost 的 ScrollViewer 元素是真正承载文本的元素 现在有 N 多 Element 把它给遮住了, 在此控件之上的所有元素都设置 IsHitTestVisible="False" 属性
baidu_31302759 2016-06-15
  • 打赏
  • 举报
回复
操作完了把光标位置重新设置下,不行么
baidu_31302759 2016-05-25
  • 打赏
  • 举报
回复
加个事件不行么,每次输入后光标都放到最后
携丶七月 2016-05-09
  • 打赏
  • 举报
回复
帖子不要沉了
携丶七月 2016-05-09
  • 打赏
  • 举报
回复
很急,在线等
携丶七月 2016-05-09
  • 打赏
  • 举报
回复
坐等大神来回复

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧