Silverlight 4:2个查看/隐藏操作后禁用用户控制的子窗口

时间:2011-08-25 14:41:47

标签: silverlight mvvm mvvm-light

我面临一个非常不寻常的问题,我有一个UserControl,它显示ChildWindow对这个ChildWindow执行一些操作,我完成我的操作后关闭它,然后(再次)打开它,它工作正常,但是很快当我关闭这个ChildWindow时,UserControl将被禁用。

对于我的应用程序中的所有ChildWindows都会发生这种情况,例如,如果我打开(比方说)ChildWindow01然后关闭它然后打开ChildWindow02并关闭它,则基本UserControl将被禁用。

它是一个MVVM应用程序但是我从UserControl.xaml.cs打开这些ChildWindows,点击按钮事件。

P.S。我正在为我的应用程序使用Galasoft MVVM框架。

请建议。

修改

UserControl XAML

<StackPanel Style="{StaticResource QuizEditorStackPanelStyle}">
    <HyperlinkButton x:Name="lnkSetting" Content="Settings" 
        Command="{Binding QuizSettingCommand}" CommandParameter="{Binding SettingId}"/>
</StackPanel> 

调用ViewModel - &gt; RelayCommand,用于打开子窗口(VM中的私有属性)

private ChildWindow QuizSettingWindow { 
    get { 
        return new QuizSetting(this.QuizSettingId); 
    } 
} 

子窗口打开

private void OpenQuizSettingScreen(long quizSettingId) { 
    this.QuizS ettingWindow.Show();
} 

儿童窗口关闭自我的按钮事件

2 个答案:

答案 0 :(得分:0)

在关闭子窗口时,您是否取消订阅结束事件?不确定这可能是你的问题的原因。尝试取消订阅子窗口的关闭事件。

答案 1 :(得分:0)

我在silverlight论坛上找到this thread,我也有这个问题。该线程解释了您的问题并为其提供了临时修复。这个修复对我有用。

如果你打电话

Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, True);

关闭窗口后,将始终启用父级。这个修复对我有用,我希望它对你也有用。

但是如果在你的情况下只有一个用户控件阻止(而不是整个应用程序)那么你可能想要调用像

这样的东西
this.SetValue(Control.IsEnabledProperty, True);

或者,如果您从子窗口中订阅了close事件(如果您扩展它),那么您可以考虑调用:

this.Parent.SetValue(Control.IsEnabledProperty, True);

我还没有测试过这些。但在我的情况下,第一个工作。我希望这一切都可以帮助你解决问题。