Silverlight для Windows Phone 7 Пользовательское текстовое поле usercontrol Текстовое свойство, возвращающее ноль - PullRequest
2 голосов
/ 07 июля 2011

Я делаю приложение для Windows Phone 7 и столкнулся со следующей проблемой: когда я создаю usercontrol, который содержит текстовое поле, и создаю свойство DependencyProperty, чтобы иметь возможность привязать его к данным, свойство для доступа к нему возвращает нуль,и когда я пытаюсь установить текст на что-то, он этого не делает.Я прочитал Здесь , что «Вам нужно вызвать NotifyPropertyChanged () в ваших установщиках для элементов, с которыми вы хотите связать.», Но я не знаю, как это сделать.Есть интерфейс INotifyPropertyChanged, но я не думаю, что мне это нужно, и я не нашел никаких подсказок, как написать его, если бы мне пришлось написать.

Вот мой usercontrol:

    <Grid VerticalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"></ColumnDefinition>
        <ColumnDefinition Width="5.18*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"></RowDefinition>
        <RowDefinition Height="1*"></RowDefinition>
    </Grid.RowDefinitions>

    <TextBlock VerticalAlignment="Bottom"
               HorizontalAlignment="Left"
               Grid.Column="1"
               Grid.Row="0"
               Text="{Binding Tag}"
               Foreground="Black"
               Margin="10,0,0,0"
               Style="{StaticResource MenuTextStyle}"
               TextWrapping="Wrap"/>
    <Image Source="../Resources/Graphics/sign_arrow_black.png"
           Margin="0,15,0,0"
           HorizontalAlignment="Right"
           VerticalAlignment="Top"
           Grid.Column="0"
           Grid.Row="1"
           Height="30">
    </Image>
    <TextBox x:Name="ContentBox"
             Style="{StaticResource TextBoxStyle}"
             VerticalAlignment="Top"
             HorizontalAlignment="Stretch"
             HorizontalContentAlignment="Left"
             VerticalContentAlignment="Center"
             Grid.Column="1"
             Grid.Row="1"
             Padding="0,0,0,0"
             Margin="0,0,0,0"
             BorderThickness="0"
             IsReadOnly="{Binding IsReadOnly}"
             Text="{Binding TextContent}">
    </TextBox>
</Grid>

А вот DependencyProperty: (EDIT: переформатирован)

    public static readonly DependencyProperty TextContentProperty = DependencyProperty.Register("TextContent", typeof(string), typeof(LargeTextBox), new PropertyMetadata(default(string)));

    public string TextContent
    {
        get { return (string)GetValue(TextContentProperty); }
        set { SetValue(TextContentProperty, value);}
    }

PS: я знаю о стилях и шаблонах, но, поскольку у меня та же проблема с более сложными элементами управления, это не вариант.

РЕДАКТИРОВАТЬ: я работал над проблемой и решил вопрос «текст не отображается», и я мог бы поместить текст textboxt на другой элемент управления, но когда я связываю его с данными, он по-прежнему не работает,Я достиг этого, написав ValueChangedCallback:

private static void OnTextPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    LargeTextBox box = (LargeTextBox)sender;
    box.ContentBox.Text = box.Text;
    if (box.TextChanged != null) box.TextChanged(box, new DependencyPropertyChangedEventArgs());
}

и обработчик события TextChanged текстового поля:

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        Text = ContentBox.Text;
    }

1 Ответ

2 голосов
/ 07 июля 2011

Установить datacontext в компоненте инициализации this.DataContext = this; Надеюсь, что поможет

...