Пробросить свойство зависимости в UserControl

142
18 мая 2019, 19:10

Есть UserControl:

<Grid>
    <TextBox VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
             Panel.ZIndex="2" Background="Transparent" Name="txt">
    </TextBox>
    <Rectangle>
    </Rectangle>
</Grid>

Я добавил в него свойство зависимости:

public string Text
{
    get
    {
        return (string)GetValue(TextProperty);
    }
    set
    {
        SetValue(TextProperty, value);
        txt.Text = Text; // txt мой tetxtbox из контрола
    }
}
public static readonly DependencyProperty TextProperty =
    DependencyProperty.Register("Text", typeof(string), typeof(TextBoxP), new PropertyMetadata(null));

Потом в проекте пишу:

<local:TextBoxP HorizontalAlignment="Left" 
                Height="57" Margin="195,98,0,0"
                Text="Текст"
                VerticalAlignment="Top" Width="193"/>

Но текст не отображается, как исправить?

Answer 1

Это делается примерно так:

<UserControl ... 
             Name="uc">
    <Grid>
        <TextBox VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
                 Panel.ZIndex="2" Background="Transparent"
                 Text="{Binding ElementName=uc, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        <Rectangle/>
    </Grid>
</UserControl>

А свойство зависимости должно быть обычное:

public string Text
{
    get => (string)GetValue(TextProperty);
    set => SetValue(TextProperty, value);
}
public static readonly DependencyProperty TextProperty =
    DependencyProperty.Register(nameof(Text), typeof(string), typeof(TextBoxP));

Не забывайте, что обычное свойство к свойству зависимости нужно лишь для удобства использования в коде, при установке свойств в XAML фреймворк пишет значение напрямую в DependencyProperty TextProperty, собственно поэтому никакая логика, помещенная в сеттер Text, не будет выполняться.

Answer 2

Привет. Элемент TextBox имеет свойство Text, intellisence не всегда корректно дополняет xaml.

Ссылки. https://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.text(v=vs.110).aspx https://www.dotnetperls.com/textbox-wpf

У меня работает в таком виде:

<TextBox VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
                 Panel.ZIndex="2" Background="Transparent" Name="txt" Text=""></TextBox>
READ ALSO
Простой файловый менеджер на Mono под Linux

Простой файловый менеджер на Mono под Linux

Необходимо написать простейший проводник или файловый менеджер, который будет работать с НМЖД и внешним USB накопителемДолжны быть функции...

141
Получить данные с двух таблиц

Получить данные с двух таблиц

Для работы с базами данных использую ORM RedBeanPHP

145
Ошибка mysql SQLSTATE[HY000] [2054]

Ошибка mysql SQLSTATE[HY000] [2054]

При попытки подключения к MySQL из PHP Yii2, да и просто из PHP методом PDO Происходит ошибка: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

186
Как подключиться к PDO через константы?

Как подключиться к PDO через константы?

Как вписать константы для подключения?

110