[英]WPF click event handler get textblock text
我的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>
在后面的代码我有一个事件处理程序单击(双击)
private void interface_mouseDown(object sender, MouseButtonEventArgs e)
{
var tb = sender as TextBox;
if (e.ClickCount == 2)
MessageBox.Show("Yeah interfac " + tb.Text);
}
我得到一个NullReferenceException。
var tb = sender as TextBox
这导致null
因为它实际上是一个TextBlock
。
只需改为
var tb = sender as TextBlock
最有可能的是sender
必须是TextBlock
。 并且对于将来,您应该检查null
上的发件人,以便再次不引发异常:
var tb = sender as TextBlock;
if (tb != null)
{
// doing something here
}
为了使它紧凑和简单,只需做这些改变:
private void interface_mouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
MessageBox.Show("Yeah interfac " + ((TextBlock)sender).Text);
}
哦oops没有看到你试图扮演TextBox而不是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上的nav属性,我可能错了但是idk。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.