C# XAML自定义文本框光标停留在条目的开头

C# XAML自定义文本框光标停留在条目的开头,c#,xaml,win-universal-app,uwp,uwp-xaml,C#,Xaml,Win Universal App,Uwp,Uwp Xaml,我正在为适用于Windows 8.1 Universal/UWP的XAML应用程序创建自定义控件,并不断发现一些细微差别。我似乎找不到任何关于创建现有控件(如TextBox)的自定义实现的优秀教程,因此我一直在查看Telerik等控件的源代码,以了解它们的自定义控件是如何工作的 我遇到的最新问题是,即使是最简单的自定义文本框,如果光标不停留在条目的开头,也无法创建。当我不断输入文本时,光标停留在开头,即使文本被追加到结尾。我通过在模拟器下面添加一个正常的文本框来验证它没有问题,该文本框功能正常。

我正在为适用于Windows 8.1 Universal/UWP的XAML应用程序创建自定义控件,并不断发现一些细微差别。我似乎找不到任何关于创建现有控件(如TextBox)的自定义实现的优秀教程,因此我一直在查看Telerik等控件的源代码,以了解它们的自定义控件是如何工作的

我遇到的最新问题是,即使是最简单的自定义文本框,如果光标不停留在条目的开头,也无法创建。当我不断输入文本时,光标停留在开头,即使文本被追加到结尾。我通过在模拟器下面添加一个正常的文本框来验证它没有问题,该文本框功能正常。我确信这与我如何创建自定义控件有关

这是我的控制:

public class CustomTextBox : TextBox
{
    public CustomTextBox()
    {
        DefaultStyleKey = typeof(CustomTextBox);
    }
}
下面是我的Generic.xaml文件及其模板,以说明该问题:

<ResourceDictionary 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:customControls="using:CustomControls">
    <Style TargetType="customControls:CustomTextBox">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="customControls:CustomTextBox">
                    <TextBox Text="{TemplateBinding Text}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
我还尝试订阅TextChanged事件,并根据新文本进行选择以尝试移动光标,但这两种方法都不起作用:

private void CustomTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    Select(Text.Length, 0);
}
更新

在更改为从
控件继承之后,
我又回到了原来的问题。订阅TextChanged事件时,我无法获取要实时更新的Text属性。我支持这一点,因为它走的是一条与此不同的道路


旁注:我甚至试图从
TextBox
继承的原因是Telerik的RadTextBox控件就是这样实现的。

正如@lokusking所提到的,在这里将
TextBox
嵌套在另一个
TextBox
中是不对的,因为您的
自定义TextBox
继承自
TextBox
,您需要自定义您的
ControlTemplate
like

您可以复制
TextBox
的默认模板,并替换为您的
CustomTextBox
并尝试一下,它将解决您的问题。您还可以创建自己的模板,例如:。但是不要在
自定义文本框
中嵌套另一个
文本框
,您可以在这个线程中引用答案:,它很好地解释了我们使用模板控件的位置和原因


如果要注册其他属性,可以使用。如果要注册新事件,可以参考。

您犯了一个常见错误。ControlTemplate不应包含其他文本框。您已将一个文本框嵌套在另一个文本框中。孩子们的事件和其他一切都没有连接到
CustomTextBox
@lokusking-谢谢,我已经做了一个更改,从
控件继承了
,但现在已经完全恢复了。我已经用一个新的帖子链接更新了我的评论,因为它与我上面描述的问题不完全相关。谢谢,这正是我需要看到的!
{Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, Path=Text}
private void CustomTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    Select(Text.Length, 0);
}