Изменить стиль дочернего элемента в CustomControl - PullRequest
2 голосов
/ 14 марта 2019

У меня есть CustomTextBox следующим образом:

<TextBox x:Class="StackOverflow.CustomUserControl.CustomTextBoxView"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     x:Name="MainTextBox"
     mc:Ignorable="d">
<TextBox.Template>
    <ControlTemplate>
        <Grid>
            <ScrollViewer x:Name="PART_ContentHost"
                          Margin="0,0,0,5"
                          Panel.ZIndex="1" />

            <Border CornerRadius="2"
                    Name="BorderToChange"
                    BorderThickness="0,0,0,3.7"/>

            <TextBlock Text="{Binding ElementName=MainTextBox, Path=HintText}">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Foreground"
                                Value="Transparent" />
                        <Setter Property="Margin"
                                Value="0,0,0,3" />
                        <Setter Property="VerticalAlignment"
                                Value="Bottom" />
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </Grid>
    </ControlTemplate>
</TextBox.Template>

Я использую это CustomTextBox следующим образом:

<customUserControl:CustomTextBoxView Width="50"
     Height="50"
     HorizontalContentAlignment="Center"
     VerticalContentAlignment="Center"
     Text="{Binding Mode=TwoWay, Path=Period, UpdateSourceTrigger=PropertyChanged}"/>

Есть ли способ, которым яМожно ли изменить свойство BorderThickness элемента Border с именем "BorderToChange" внутри ControlTemplate моего CustomTextBox при его использовании?
Я попробовал следующее, но это не сработало:

<customUserControl:CustomTextBoxView Width="50"
                                        Height="50"
                                        HorizontalContentAlignment="Center"
                                        VerticalContentAlignment="Center"
                                        FontSize="35"
                                        Text="{Binding Mode=TwoWay, Path=Period, UpdateSourceTrigger=PropertyChanged}">
    <customUserControl:CustomTextBoxView.Resources>
        <Style TargetType="{x:Type customUserControl:CustomTextBoxView}">
            <Style.Resources>
                <Style TargetType="{x:Type Border}">
                    <Setter Property="BorderThickness" Value="10"></Setter>
                </Style>
            </Style.Resources>
        </Style>
    </customUserControl:CustomTextBoxView.Resources>
</customUserControl:CustomTextBoxView>

1 Ответ

2 голосов
/ 14 марта 2019

Используйте {TemplateBinding} в шаблоне:

<Border CornerRadius="2" Name="BorderToChange" BorderThickness="{TemplateBinding BorderThickness}"/>

... и укажите значение по умолчанию:

<TextBox x:Class="..." BorderThickness="0,0,0,3.7"> ...

Затем можно просто установить свойство BorderThickness элемента управления, чтобы переопределить значение по умолчанию:

<customUserControl:CustomTextBoxView ... BorderThickness="1" ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...