C# 标头属性在UWP CustomTextBox中不起作用

C# 标头属性在UWP CustomTextBox中不起作用,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,在UWP中,我创建了从TextBox控件派生的CustomTextBox。在我的CustomTextBox中,我使用了各种属性,但有些属性工作,有些不工作 以下属性工作正常 宽度高度边界笔刷等 以下属性不起作用 标题文本等,。请在下面找到代码片段 MyTextBox.cs public sealed class MyTextBox : TextBox { public MyTextBox() { this.DefaultStyleKey = typeof(

在UWP中,我创建了从TextBox控件派生的CustomTextBox。在我的CustomTextBox中,我使用了各种属性,但有些属性工作,有些不工作

以下属性工作正常

  • 宽度高度边界笔刷等
以下属性不起作用

  • 标题文本等,。请在下面找到代码片段
MyTextBox.cs

public sealed class MyTextBox : TextBox
{
    public MyTextBox()
    {
        this.DefaultStyleKey = typeof(MyTextBox);
    }
}
Generic.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:SfMaskedEdit_header">

    <Style TargetType="local:MyTextBox" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:MyTextBox">
                    <Border
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
<Page
    x:Class="SfMaskedEdit_header.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:SfMaskedEdit_header"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid x:Name="grid1">

        <local:MyTextBox x:Name="myTextBox" Text="Hello" Header="MyTextBox" Width="200" Height="40" 
                         BorderBrush="Blue" BorderThickness="2" Background="Pink"/>

    </Grid>
</Page>

MainPage.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:SfMaskedEdit_header">

    <Style TargetType="local:MyTextBox" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:MyTextBox">
                    <Border
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>
<Page
    x:Class="SfMaskedEdit_header.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:SfMaskedEdit_header"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid x:Name="grid1">

        <local:MyTextBox x:Name="myTextBox" Text="Hello" Header="MyTextBox" Width="200" Height="40" 
                         BorderBrush="Blue" BorderThickness="2" Background="Pink"/>

    </Grid>
</Page>

请使用以下示例了解更多信息


示例:

原因是您已覆盖默认模板,因此删除了通常构成
文本框的所有元素

要理解这一点,重要的是要明确UWP控件通常只提供一种行为,但它们本身由其模板中的多个其他控件组成(术语通常是XAML控件在默认情况下看起来较少)。这些控件提供了控件的可视化表示。例如,在
TextBox
的情况下,模板由
Border
组成,用于其周围的边框,
TextBlock
用于占位符文本,
按钮
用于清除内容,一个
ScrollViewer
,其中呈现
文本
输入,一个
ContentPresenter
作为标题,依此类推

您自定义的
文本框
实际上只是
边框
本身,这意味着您基本上已经失去了您提到的功能,因为没有控件可以直观地显示它们

要解决您的问题,我建议从默认的
文本框开始
模板(通过复制并粘贴到您自己的样式。然后只编辑您要更改的部分。这样,您将从完全功能状态开始,并可以决定更改什么,同时保留控件的功能


您可以在
C:\ProgramFiles(x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\{version}中找到默认模板\Generic\Generic.xaml
。您可以搜索
以查找默认的
文本框
样式和模板。

原因是您已覆盖默认模板,因此删除了通常构成
文本框的所有元素

要理解这一点,重要的是要明确UWP控件通常只提供一种行为,但它们本身是由其模板中的多个其他控件组成的(术语通常是XAML控件在默认情况下看起来较少)。这些控件提供控件的可视化表示。例如,在
文本框
的情况下,模板由
边框
组成,边框周围为
边框
,占位符文本为
文本块
,清除内容为
按钮
,文本所在的
滚动查看器
输入被呈现,标题为
ContentPresenter
,以此类推

您自定义的
文本框
实际上只是
边框
本身,这意味着您基本上已经失去了您提到的功能,因为没有控件可以直观地显示它们

要解决您的问题,我建议从默认的
文本框开始
模板(通过复制并粘贴到您自己的样式。然后只编辑您要更改的部分。这样,您将从完全功能状态开始,并可以决定更改什么,同时保留控件的功能


您可以在
C:\ProgramFiles(x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\{version}中找到默认模板\Generic\Generic.xaml
。您可以搜索
以查找默认的
文本框
样式和模板。

您好,我们注意到您在上有相同的帖子,我的同事已经在那里回复了您,您可以继续跟踪您的问题,谢谢。是的,谢谢您提供的信息。现在,它工作正常。您好,我们请注意,你在上有相同的帖子,我的同事已经在那里回复了你,你可以继续跟踪你的问题,谢谢。是的,谢谢你提供的信息。现在,它工作正常。是的。我同意你的看法。我们有没有办法继承默认的文本框设置?这在我回答的最后一段中描述:-)。您需要更多帮助吗?不,我的意思是我不想复制和粘贴默认模板,我只想使用一些关键字来继承默认设置。不,很遗憾,这是不可能的,您必须复制和编辑它,因为
模板
值本身只是一个视觉层次结构,因此基本上无法定义上面的任何继承操作。它是没有“可继承”属性的多个控件。是的。我同意你的看法。我们有什么方法可以继承默认的文本框设置吗?这在我回答的最后一段中描述:-)。你需要更多帮助吗?不,我的意思是我不想复制和粘贴默认模板,我只想使用一些关键字来继承默认设置。不,很遗憾,这是不可能的,你必须复制和编辑它,因为
模板
值本身只是一个视觉层次结构,因此,基本上不可能在其上定义任何继承操作。它是多个没有“可继承”属性的控件。