2014-04-25 70 views
3

我在我的XAML文本塊:WPF click事件處理程序得到文本塊文本

<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> 

在後面的代碼我有點擊(雙擊)的事件處理程序

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

我得到一個NullReferenceException。

+0

你爲什麼不接受任何答案嗎? –

回答

6
var tb = sender as TextBox 

這導致null,因爲它實際上是一個TextBlock

只是改變

var tb = sender as TextBlock 
1

看上去最有可能sender必須是TextBlock。而對於未來,你應該檢查在null發送者爲了再度不會引發異常:

var tb = sender as TextBlock; 

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

喔哎呀沒看到你試圖強制轉換爲文本框不TextBlock的。假設你想TextBlock然後看看下面:

我不使用事件背後的代碼。我嘗試使用命令來完成一切。然而,一個解決方法我會立即嘗試是把在控制名稱和直接在代碼中訪問它的背後,像這樣:

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

然後可以在後面訪問:

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

還要注意,我可以如果'ClickCount'是控件TextBlock或TextBox上的導航屬性,則會出錯但idk。

+0

請發表評論爲什麼-1來表示一個論點。 – TMan

0

爲了使結構緊湊,易於只是做這些changings:

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