在另一个事件中调用事件时出错

时间:2010-02-28 05:56:03

标签: silverlight events

我正在使用silverlight,我的代码是为usercontrol设置的,如下所示:

myxaml.xaml (只显示切换按钮[第119行])

<ToggleButton x:Name="btnToggleResizeMap" Checked="btnToggleResizeMap_Checked" Unchecked="btnToggleResizeMap_Unchecked" IsChecked="True"/>

codebehind.cs

public partial class MapRadar : UserControl
{

    public delegate void OnMapExpandChange(object sender, EventArgs e);
    public event OnMapExpandChange Expanded;
    public event OnMapExpandChange NotExpanded;

    private void btnToggleResizeMap_Checked(object sender, System.Windows.RoutedEventArgs e)
    {
        NotExpanded(this, null); //If i remove this line, the app runs fine
    }

    private void btnToggleResizeMap_Unchecked(object sender, System.Windows.RoutedEventArgs e)
    {
        Expanded(this, null); //If i remove this line, the app runs fine
    }
}

Visual Studio在应用程序完全加载之前抛出此错误:

AG_E_PARSER_BAD_PROPERTY_VALUE [线路:119位置:285]

在:

System.Windows.Application.LoadComponent(this, new System.Uri("/Xormis.Silverlight.ExSys;component/Views/Map/MapRadar.xaml", System.UriKind.Relative));

位于名为 public void InitializeComponent()

的函数内

我不知道这里发生了什么,是否有反对在另一个事件中进行事件调用的事情?

1 个答案:

答案 0 :(得分:2)

问题是你有空事件。创建复选框后,它会立即引发Unchecked事件,该事件会调用btnToggleResizeMap_Unchecked处理程序,该处理程序会尝试调用您的Expanded事件。由于Expanded为null,因此抛出异常,并且它永远不会完成运行XAML。

您的代码应如下所示:

private void btnToggleResizeMap_Checked(object sender, System.Windows.RoutedEventArgs e) 
{
    if (NotExpanded != null) 
        NotExpanded(this, null);
} 

private void btnToggleResizeMap_Unchecked(object sender, System.Windows.RoutedEventArgs e) 
{
    if (Expanded != null)
        Expanded(this, null);
} 

有关事件的更全面说明,请参阅C# Events and Thread Safety