Yogevnn
Yogevnn

Reputation: 1510

WPF click event handler get textblock text

I have a text block in my xaml:

<DataTemplate x:Key="InterfacesDataTemplate"
              DataType="ca:Interface">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="1" Text="{Binding Path=Name}" 
                   MouseLeftButtonDown="interface_mouseDown"/>
    </Grid>
</DataTemplate>

On the code behind I have an event handler for click (double-click)

private void interface_mouseDown(object sender, MouseButtonEventArgs e)
{
    var tb = sender as TextBox;
    if (e.ClickCount == 2)
        MessageBox.Show("Yeah interfac " + tb.Text);
}

I'm getting a NullReferenceException.

Upvotes: 3

Views: 9080

Answers (4)

TheGaMeR123
TheGaMeR123

Reputation: 80

To make it compact and easy just do these changings:

private void interface_mouseDown(object sender, MouseButtonEventArgs e)
{
   if (e.ClickCount == 2)
    MessageBox.Show("Yeah interfac " + ((TextBlock)sender).Text);
}

Upvotes: 0

TMan
TMan

Reputation: 4122

Ohh oops didn't see you were trying to cast as TextBox not TextBlock. Assuming you want TextBlock then look at below:

I don't use code behind events. I try to use commands to do everything. However, one workaround I would immediately try is putting a name on the control and accessing it directly in code behind like so:

    <TextBlock Grid.Column="1" x:Name="MyTextBlock"
           Text="{Binding Path=Name}" MouseLeftButtonDown="interface_mouseDown"/>
        </Grid>
    </DataTemplate>

Then can access in back:

  private void interface_mouseDown(object sender, MouseButtonEventArgs e)
  {
    if (MyTextBlock.ClickCount == 2)
        MessageBox.Show("Yeah interfac " + MyTextBlock.Text);
  }

Also note, i could be wrong but idk if 'ClickCount' is a nav property on the control TextBlock or TextBox.

Upvotes: -1

Anatoliy Nikolaev
Anatoliy Nikolaev

Reputation: 22702

Most likely what sender must to be TextBlock. And for the future you should check the sender on the null in order once again not raise an exception:

var tb = sender as TextBlock;

if (tb != null)
{
    // doing something here
}

Upvotes: 1

user27414
user27414

Reputation:

var tb = sender as TextBox

This results in null because it's actually a TextBlock.

Just change to

var tb = sender as TextBlock

Upvotes: 7

Related Questions