C# 标头属性在UWP CustomTextBox中不起作用
在UWP中,我创建了从TextBox控件派生的CustomTextBox。在我的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(
- 宽度高度边界笔刷等
- 标题文本等,。请在下面找到代码片段
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
。您可以搜索
以查找默认的文本框
样式和模板。您好,我们注意到您在上有相同的帖子,我的同事已经在那里回复了您,您可以继续跟踪您的问题,谢谢。是的,谢谢您提供的信息。现在,它工作正常。您好,我们请注意,你在上有相同的帖子,我的同事已经在那里回复了你,你可以继续跟踪你的问题,谢谢。是的,谢谢你提供的信息。现在,它工作正常。是的。我同意你的看法。我们有没有办法继承默认的文本框设置?这在我回答的最后一段中描述:-)。您需要更多帮助吗?不,我的意思是我不想复制和粘贴默认模板,我只想使用一些关键字来继承默认设置。不,很遗憾,这是不可能的,您必须复制和编辑它,因为模板
值本身只是一个视觉层次结构,因此基本上无法定义上面的任何继承操作。它是没有“可继承”属性的多个控件。是的。我同意你的看法。我们有什么方法可以继承默认的文本框设置吗?这在我回答的最后一段中描述:-)。你需要更多帮助吗?不,我的意思是我不想复制和粘贴默认模板,我只想使用一些关键字来继承默认设置。不,很遗憾,这是不可能的,你必须复制和编辑它,因为模板
值本身只是一个视觉层次结构,因此,基本上不可能在其上定义任何继承操作。它是多个没有“可继承”属性的控件。