【问题标题】:XamlParseException when trying to bind subclass Loaded event handler尝试绑定子类 Loaded 事件处理程序时出现 XamlParseException
【发布时间】:2014-04-10 09:39:55
【问题描述】:

我在我的 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

但是,我的处理程序似乎确实有正确的签名?

更奇怪的是,我在另一个页面中对 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 中调用基类型,但这违背了拥有公共基的目的,不是吗?

【问题讨论】:

    标签: xaml events windows-phone-8 loaded


    【解决方案1】:

    这就是我最终解决此问题的方式: 为 itemscontrol 命名并在 MainPage 构造函数中连接事件:

    itemControl1.Loaded += base.ItemsControl_Loaded;

    【讨论】:

      【解决方案2】:

      尝试用 EventArgs 替换 System.Windows.RoutedEventArgs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-14
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多