Свойство заголовка не работает в UWP CustomTextBox - PullRequest
0 голосов
/ 31 октября 2019

В UWP я создал CustomTextBox, который является производным от элемента управления TextBox. В моем CustomTextBox я использовал различные свойства, но некоторые свойства работают, а некоторые не работают.

Ниже свойства работают нормально,

  • Ширина Высота BorderBrush и т. Д.,

Ниже свойства не работают,

  • Текст заголовка и т. Д. Ниже приведен фрагмент кода:

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>

MainPage.xaml

<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>

Пожалуйста, используйте образец ниже для получения дополнительной информации,

Образец: MyTextBox

1 Ответ

0 голосов
/ 31 октября 2019

Причина в том, что вы переопределили шаблон по умолчанию и, следовательно, удалили все элементы, которые обычно составляют TextBox.

Чтобы понять это, важно прояснить, что элементы управления UWP обычно простообеспечивают поведение , но сами по себе состоят из нескольких других элементов управления в своем шаблоне (по терминологии обычно элементы управления XAML выглядят менее по умолчанию). И эти элементы управления обеспечивают визуальное представление элемента управления. Например, в случае TextBox шаблон состоит из Border для границ вокруг него, TextBlock для текста-заполнителя, Button для очистки содержимого, a ScrollViewer, где Text ввод обрабатывается и ContentPresenter для заголовка и т. Д.

Ваш пользовательский TextBox на самом деле является просто Border, что означает, что вы по сути потеряли возможности, которые вы упомянули, потому что нет элементов управления поверхность их визуально.

Чтобы исправить вашу проблему, я предлагаю , начиная со стандартного TextBox шаблона (путем копированияи вставьте его в свой собственный стиль. А затем просто отредактируйте части, которые вы хотите изменить. Таким образом, вы начнете с полностью функционального состояния и сможете решить, что изменить, сохранив возможности элемента управления.

Вы можете найти шаблон по умолчанию в C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\{version}\Generic\generic.xaml. Вы можете найти <Style TargetType="TextBox">, чтобы найти стиль и шаблон TextBox по умолчанию.

...