按钮事件处理程序执行后Silverlight崩溃
亲爱的团队,这是我的问题: 在一个控件中,我有一个子控件的通用编号(我只在运行时知道它)。 每个子控件都是一个LanguageTextView,其中包含来自Liquid的富文本编辑器。 按钮用于控制这些富文本在父控件中的显示方式。 有两个选项:单个LanguageTextView或父控件内所有等间距的LanguageTextView项 为了解决这个问题,我在容器中使用了网格。 通过代码隐藏,我在“加载”事件中用丰富的文本填充网格: _textBoxList是一个字典,它通过要控制的网格对象传递给网格控制器。网格控制器,称为MultiLanguageGridController,处理LanguageTextView在网格内的显示方式(单个对象或所有对象一起显示)。 作为第一步,在创建时,grid controller将LanguageTextView放置在每列中,代码如下:按钮事件处理程序执行后Silverlight崩溃,silverlight,Silverlight,亲爱的团队,这是我的问题: 在一个控件中,我有一个子控件的通用编号(我只在运行时知道它)。 每个子控件都是一个LanguageTextView,其中包含来自Liquid的富文本编辑器。 按钮用于控制这些富文本在父控件中的显示方式。 有两个选项:单个LanguageTextView或父控件内所有等间距的LanguageTextView项 为了解决这个问题,我在容器中使用了网格。 通过代码隐藏,我在“加载”事件中用丰富的文本填充网格: _textBoxList是一个字典,它通过要控制的网格对象传递给
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方法吗?谢谢。