繁体   English   中英

XAML Textblock窃听事件未在ItemsControl DataTemplate内部触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM