Вот мой настраиваемый элемент управления с настраиваемым стилем xaml:

using System.Windows.Controls;

namespace MyControls
{
    public class CustomTextBox : TextBox
    {
    }
}

<Style TargetType="controls:CustomTextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="controls:CustomTextBox">
                <StackPanel>
                    <TextBlock Text="" />
                    <TextBox Text="{TemplateBinding Text}" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

И при использовании обработчик TextChanged по какой-то причине не получает обновленное поле Text.

<controls:CustomTextBox x:Name="ControlInstance"
                        TextChanged="OnTextChanged"
                        InputScope="EmailNameOrAddress" />

private void OnTextChanged(object sender, TextChangedEventArgs e)
{
    // ControlInstance.Text is always ""!
}
0
moswald 29 Мар 2013 в 01:10

1 ответ

Лучший ответ

Это потому, что вы изменяете свойство Text внутреннего TextBox в своем шаблоне, но не свойство Text самого CustomTextBox.

Я рекомендую вам проверить http: // www. geekchamp.com/articles/creating-a-wp7-custom-control-in-7-steps, чтобы получить помощь в создании настраиваемого элемента управления.

1
Paul Annetts 29 Мар 2013 в 01:56
Вы можете уточнить? Я думал, что унаследовал свойство Text от TextBox.
 – 
moswald
29 Мар 2013 в 01:35
1
Ты. Но вы помещаете второй TextBox в свой шаблон и привязываете свойство Text к внутреннему TextBox.
 – 
Paul Annetts
29 Мар 2013 в 01:48
Верно, в этом есть смысл. Спасибо.
 – 
moswald
29 Мар 2013 в 20:16
Привет, Пол! Спасибо за подсказку. У меня такая же проблема.
 – 
Patrick Pirzer
18 Май 2016 в 16:45