【问题标题】:XAML Textblock Tapped event not firing inside ItemsControl DataTemplateXAML Textblock Tapped 事件未在 ItemsControl DataTemplate 内触发
【发布时间】:2014-05-08 03:22:23
【问题描述】:
        <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 事件被触发并且没有问题地被处理。

这与焦点有关吗?有什么办法可以让它工作吗?

谢谢!

【问题讨论】:

  • 这很奇怪。当我使用以下字形时:它不会触发(这是符号字体的实心圆圈)但是几乎所有其他字形都可以工作(事件处理程序工作)。关于字形类型的某些东西会导致问题。也许以某种方式移动命中区域(这些是“零宽度”字形)。

标签: c# xaml windows-store-apps


【解决方案1】:

对我来说,它工作正常。

但是,一个假设是,ListView 或您的DataTemplate 被使用的地方在事件处理程序之前处理Tapped 事件。检查你的ListView 属性和我的。

我的 ListView 如下。你可以找到&lt;!-- THIS IS WHERE I TESTED --&gt;代码。

<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");
    }

【讨论】:

  • 嗯...看不出我的代码有何不同,但显然发生了一些事情。我会继续尝试。感谢您确认荣宰是可能的。
  • @SteveMacdonald // 如您所见,我的代码中的DataTemplate 内联在ListView 中。如果您的DataTemplate 不在其中,请以内联方式尝试。从逻辑上讲它是一样的,但谁知道......?
【解决方案2】:

这绝对是一个边缘案例。我在 Textbloxk 中用作文本的符号是“零宽度”字形,旨在相互叠加以制作单选按钮等。大多数符号字形不是零宽度,它们工作正常。解决方案是在 Textblock 中添加一个 Width="40",然后事件处理程序正常工作。

【讨论】:

    【解决方案3】:

    尝试在后面代码的构造函数中添加处理程序:

    GreenQualifier.AddHandler(TappedEvent, new TappedEventHandler(TrafficLightQualifier_OnTapped), true);
    

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多