Как щелкнуть TextBlock в DataTemplate? - PullRequest
1 голос
/ 08 марта 2011

Это мой код XAML:

<ListBox ItemsSource="{Binding}" Name="listBox">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <StackPanel Width="370">
                    <TextBlock Text="{Binding AuthorName}"  x:Name="author" MouseEventLeftDown="click"/>
                </StackPanel>
            </StackPanel>                       
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

И обработчик кликов

private void click(object sender, RoutedEventArgs e)
{
    if(author.Text.Equals("Hi"))
    {
       // Do Something Special
    }
} 

Ошибка:

Ошибка: имя «автор» не существует в текущем контексте

Но я не понимаю, что является причиной этой ошибки или почему она происходит.

Ответы [ 5 ]

3 голосов
/ 09 марта 2011

Ваш TextBlock с именем author не существует в области действия вашего обработчика кликов, поскольку он находится в DataTemplate .Происходит то, что author TextBlock создается один раз для каждого из ваших элементов данных (предположительно, класса Author или некоторого класса Book), поэтому вы буквально можете иметь десятки элементов управления с именем author.

Вам лучше привести sender в обработчике кликов к текстовому полю, а затем проверить его текстовое свойство.Как то так:

private void click(object sender, RoutedEventArgs args)
{
  var textBox = sender as TextBox;
  if(textBox == null)
     return;

  if(textBox.Text.Equals("hi"))
  {
     // Do Something Crazy!
  }
}
0 голосов
/ 09 марта 2011

Используйте это ...

private void click(object sender, RoutedEventArgs e)
    {
        var author = (TextBlock)sender;

        if (author.Text.Equals("Hi"))
        {
            // Do Something Special    
        }
    }
0 голосов
/ 08 марта 2011

Во-первых, ваш TextBlock определен в шаблоне данных;попробуйте x:Name вместо Name в вашем TextBlock.

Во-вторых, может быть довольно сложно щелкнуть ваш TextBlock, поскольку вам придется нажимать точный пиксель в вашем TextBlock.Чтобы упростить щелчок по вашему текстовому блоку, вы, возможно, захотите поставить Background на свой TextBlock, поэтому будет намного проще щелкнуть.Вы даже можете сделать фон прозрачным:

Background="Transparent"
0 голосов
/ 08 марта 2011

используйте слушатель жестов для создания обработчика событий, такого как «нажатие», «удвоение» или что-либо еще.

0 голосов
/ 08 марта 2011

Вероятно, лучше использовать элемент пользовательского интерфейса, разработанный для касания, например, HyperlinkButton или Button.Вы можете стилизовать их так, как вам нравится - особенно если вы используете Expression Blend - но это хороший дизайн, чтобы добавить визуальный отклик о Touch.

Также - я не уверен насчет вашего кода == - вы сравниваете отправителя (элемент пользовательского интерфейса) с некоторым строковым выражением?

...