【问题标题】:Silverlight 4 : ChildWindow Disables UserControl After 2 View/Hide OperationsSilverlight 4:ChildWindow 在 2 次查看/隐藏操作后禁用 UserControl
【发布时间】:2011-08-25 14:41:47
【问题描述】:

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

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

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

附:我正在为我的应用程序使用 Galasoft MVVM 框架。

请提出建议。

编辑

用户控件 XAML

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

调用 ViewModel -> RelayCommand,它打开一个子窗口(这是 VM 中的私有属性)

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

子窗口由

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

在self的按钮事件上关闭子窗口

【问题讨论】:

  • 请显示一些代码?你能在一个简单的小应用程序中重现吗?
  • @AnthonyWJones,这里是代码的sn-ps;
  • UserControl XAML 调用 ViewModel -> RelayCommand,以 private ChildWindow QuizSettingWindow { get { return new QuizSetting(this.QuizSettingId); } } 子窗口由 private void OpenQuizSettingScreen(long quizSettingId) { this.QuizSettingWindow.Show();} 子窗口在 self 的按钮事件上关闭
  • 最好在您的问题中添加代码并使用代码格式,以便更容易阅读。
  • @Akash Lomas 已将您的代码添加到您的帖子中。

标签: silverlight mvvm mvvm-light


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我在silverlight论坛上找到了this thread,我也遇到了这个问题。该线程解释了您的问题并给它一个临时修复。这个固定对我有用。

    如果你打电话

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

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

    但如果在您的情况下只有一个用户控制块(而不是整个应用程序),那么您可能需要调用类似

    this.SetValue(Control.IsEnabledProperty, True);
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多