按钮事件处理程序执行后Silverlight崩溃

按钮事件处理程序执行后Silverlight崩溃,silverlight,Silverlight,亲爱的团队,这是我的问题: 在一个控件中,我有一个子控件的通用编号(我只在运行时知道它)。 每个子控件都是一个LanguageTextView,其中包含来自Liquid的富文本编辑器。 按钮用于控制这些富文本在父控件中的显示方式。 有两个选项:单个LanguageTextView或父控件内所有等间距的LanguageTextView项 为了解决这个问题,我在容器中使用了网格。 通过代码隐藏,我在“加载”事件中用丰富的文本填充网格: _textBoxList是一个字典,它通过要控制的网格对象传递给

亲爱的团队,这是我的问题:

在一个控件中,我有一个子控件的通用编号(我只在运行时知道它)。 每个子控件都是一个LanguageTextView,其中包含来自Liquid的富文本编辑器。 按钮用于控制这些富文本在父控件中的显示方式。 有两个选项:单个LanguageTextView或父控件内所有等间距的LanguageTextView项

为了解决这个问题,我在容器中使用了网格。 通过代码隐藏,我在“加载”事件中用丰富的文本填充网格:

_textBoxList是一个字典,它通过要控制的网格对象传递给网格控制器。网格控制器,称为MultiLanguageGridController,处理LanguageTextView在网格内的显示方式(单个对象或所有对象一起显示)。 作为第一步,在创建时,grid controller将LanguageTextView放置在每列中,代码如下:

  int count = 0;
  foreach (int key in _uiElements.Keys) {
    FrameworkElement fe = _uiElements[key];

    ColumnDefinition cd = new ColumnDefinition();
    cd.Width = new GridLength(1, GridUnitType.Star);
    _cds.Add(key, cd);

    _grid.ColumnDefinitions.Add(cd);
    _grid.Children.Add(fe);

    Grid.SetColumn(fe, count);
    Grid.SetRow(fe, 0);

    count++;
  }
要控制布局,有两种方法:showAllObjects和showSingleObjet(objectid)

showAllObject是这样的:

foreach (int key in _uiElements.Keys) {
  _cds[key].Width = new GridLength(1, GridUnitType.Star);
}
showSingleObject如下所示:

foreach(int key in _uiElements.Keys){
    if(key == objectId){
      _cds[key].Width = new GridLength(1, GridUnitType.Star);
    }else{
      _cds[key].Width = new GridLength(0);
    }
  }
按下控制按钮时,按钮事件的处理方式如下:

  ModuleListItemData mld = this.DataContext as ModuleListItemData;
  if (mld == null) {
    return;
  }
  mld.IsShowAllLanguages = !mld.IsShowAllLanguages;
  if ("IsShowAllLanguages".Equals(e.PropertyName)) {
    if (tmd.IsShowSingleLanguage) {
      _gridCtrl.showSingleObject(tmd.SelectedLanguage.OMID.Value);
    } else {
      _gridCtrl.showAllObjects();
    }

    return;
  }
IsShowAllLanguages是触发属性更改事件的属性。 通过以下方式截获和处理属性更改事件:

  ModuleListItemData mld = this.DataContext as ModuleListItemData;
  if (mld == null) {
    return;
  }
  mld.IsShowAllLanguages = !mld.IsShowAllLanguages;
  if ("IsShowAllLanguages".Equals(e.PropertyName)) {
    if (tmd.IsShowSingleLanguage) {
      _gridCtrl.showSingleObject(tmd.SelectedLanguage.OMID.Value);
    } else {
      _gridCtrl.showAllObjects();
    }

    return;
  }
其中_gridCtrl是对多语言GridController的引用

在按钮事件处理的第二次往返之后,应用程序崩溃。 在调试应用程序时,我在button clich事件处理程序的最后一行设置了一个断点,如下所示:

private void _btnShowAllLang_Click(object sender, RoutedEventArgs e) {
  ModuleListItemData mld = this.DataContext as ModuleListItemData;
  if (mld == null) {
    return;
  }
====>  mld.IsShowAllLanguages = !mld.IsShowAllLanguages; <=== Break point here
}
private void\u btnshowallang\u单击(对象发送者,路由目标){
ModuleListItemData mld=this.DataContext作为ModuleListItemData;
如果(mld==null){
回来
}

=>mld.IsShowAllLanguages=!mld.IsShowAllLanguages;奇怪但正确,解决方案是将XAML包含更改为:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
xmlns:myConverters="clr-namespace:ArgoWeb.Utility.Data" 
mc:Ignorable="d" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
d:DesignWidth="608" d:DesignHeight="112"
致:


这就解决了问题。

您能展示ModuleListItemData的定义吗?另外,为了确认这都是表单代码,您没有使用MVVM方法吗?谢谢。