尝试绑定子类Loaded事件处理程序时XamlParseException

时间:2014-04-08 00:30:07

标签: xaml events windows-phone-8 loaded

我在Windows Phone项目中遇到了同样的问题:

XamlParseException when adding event handler in XAML

http://social.msdn.microsoft.com/Forums/vstudio/en-US/7624b2fc-0dea-415f-a71d-1739020d9d2e/xamlparseexception-when-trying-to-bind-subclass-loaded-event-handler?forum=wpf

A

B

但是,看起来我的处理程序确实有正确的签名?

更奇怪的是,我在UIElement_Tap事件中做了同样的事情,在另一个页面中,它工作正常。

MainPage.xaml中

<v:PageBase
    x:Class="PhoneApp1.Views.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:v="clr-namespace:PhoneApp1.Views"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ItemsControl Grid.Row="0"
                      Loaded="ItemsControl_Loaded"
                      Margin="0,0,0,120">

            <TextBlock Text="Item1"/>
            <TextBlock Text="Item2"/>
            <TextBlock Text="Item3"/>

        </ItemsControl>

        <ItemsControl Grid.Row="1"
                      Loaded="ItemsControl_Loaded"
                      Margin="0,120,0,0">

            <TextBlock Text="Item1"/>
            <TextBlock Text="Item2"/>
            <TextBlock Text="Item3"/>
            <TextBlock Text="Item4"/>

        </ItemsControl>

    </Grid>

</v:PageBase>

MainPage.xaml.cs中

namespace PhoneApp1.Views
{
    public partial class MainPage : PageBase
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
    }
}

PageBase.cs

using Microsoft.Phone.Controls;

namespace PhoneApp1.Views
{
    // Common code across pages.
    public class PageBase : PhoneApplicationPage
    {
        protected virtual void ItemsControl_Loaded(object sender, System.Windows.RoutedEventArgs e    )
        {
            //...
        }
    }
}

我知道我可以覆盖该方法并在我的MainPage中调用基类型,但这会失去共同基础的目的,不是吗?

2 个答案:

答案 0 :(得分:0)

这就是我最终解决这个问题的方法: 给itemscontrol一个名称,并在MainPage构造函数中连接事件:

itemControl1.Loaded + = base.ItemsControl_Loaded;

答案 1 :(得分:0)

尝试将Event.Windows.RoutedEventArgs替换为EventArgs