Ошибка вызова события внутри другого события - PullRequest
0 голосов
/ 28 февраля 2010

Я использую silverlight, Мой код настроен для управления пользователем следующим образом:

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 Ответ

2 голосов
/ 28 февраля 2010

Проблема в том, что у вас нулевые события. Как только флажок создан, он немедленно вызывает событие 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 # и безопасность потоков

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...