[英]XAML Textblock Tapped event not firing inside ItemsControl DataTemplate
<DataTemplate x:Key="nodeTrafficQualifierTemplate">
<Grid Width="400" Margin="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextWrapping="WrapWholeWords" Text="{Binding Name}" />
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right" >
<TextBlock Name="GreenQualifier" Text="{StaticResource CircleOpen}"
IsTapEnabled="True"
Tapped="TrafficLightQualifier_OnTapped"
FontFamily="{StaticResource SymbolThemeFontFamily}"
FontSize="20" Margin="0,0,60,0" Foreground="Green"/>
</StackPanel>
</Grid>
</DataTemplate>
private void TrafficLightQualifier_OnTapped(object sender, TappedRoutedEventArgs e)
{
// Never get here...
var qualifier = ((TextBlock)sender).Name;
switch (qualifier)
{
case "GreenQualifier":
break;
}
}
事件處理程序根本不會被調用。 除了使用Image控件而不是Textblock之外,我幾乎擁有與此相同的東西,並且Tapped事件處理程序可以正常工作。
將觸發Textblock的Loaded事件,並且可以毫無問題地對其進行處理。
這與重點有關嗎? 有什么辦法可以使它正常工作嗎?
謝謝!
這絕對是一個邊緣案例。 我在Textbloxk中用作文本的符號是“零寬度”字形,旨在彼此重疊以制作單選按鈕等。大多數Symbol字形都不是零寬度,並且可以正常工作。 解決方案是在Textblock中添加Width =“ 40”,然后事件處理程序正常工作。
嘗試在后面的代碼中的構造函數中添加處理程序:
GreenQualifier.AddHandler(TappedEvent, new TappedEventHandler(TrafficLightQualifier_OnTapped), true);
對我來說,效果很好。
但是,有一種假設是, ListView
或使用DataTemplate
在處理事件處理程序之前先處理Tapped
事件。 檢查您的ListView
屬性並進行查找。
我的ListView如下。 您可以找到<!-- THIS IS WHERE I TESTED -->
代碼。
<ListView Grid.Row="0" x:Name="ListViewPages" HorizontalAlignment="Stretch" Background="{StaticResource LbLightShadowBrush}"
VerticalAlignment="Stretch" BorderThickness="0" Margin="0,45,0,0"
CanReorderItems="True" CanDragItems="True" AllowDrop="True" ItemContainerStyle="{StaticResource ListViewItemStyle1}" SelectionChanged="ListViewPages_OnSelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderBrush="White" BorderThickness="0,0,0,0" Height="60">
<Grid Background="White">
<StackPanel Orientation="Vertical" Margin="5">
<TextBlock x:Name="TestBlock" Foreground="{StaticResource LbBackgroundBrush}" Text="{Binding Path=Title}" FontFamily="Global User Interface" Margin="0,3" Tapped="TestBlock_OnTapped" /> <!-- THIS IS WHERE I TESTED -->
<TextBlock Foreground="{StaticResource LbLightTextBrush}" Text="{Binding Path=Data, Converter={StaticResource PropertyDataSummary}}"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ListView>
並且,僅通過斷點檢查事件處理程序。
private void TestBlock_OnTapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine("tapped");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.