WPF:处理模态对话框

时间:2011-02-27 20:19:34

标签: wpf xaml data-binding dialog modal-dialog

我在这个网站上发现了一个很好的解决方案http://www.thesilvermethod.com/Default.aspx?Id=ModalDialogManagerAsimpleapproachtodealingwithmodaldialogsinMVVM

但必须做一些更改才能将其集成到我的代码中。一路上我遇到一些小问题,主要是因为代码的某些部分我没有完全完成。

我是如何将ModalDialogManager绑定到Type IDialogViewModel的MainWindow属性。然后我有一个WindowsManager类来处理在这个属性中放置正确的实例。其中之一是EditDialogViewModel,它将EditableViewModel公开给此DialogManager。我将EditDialog视图设置为此EditDialogViewModel的DataTemplate,但是当我显示它时,新窗口只显示它的一部分。

以下是视图:

<UserControl.Resources>

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>

            <ResourceDictionary Source="EditDataTemplates.xaml" />

        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</UserControl.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="7*" />
            <RowDefinition Height="2*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>

        <ContentControl Content="{Binding Path=ViewModel}" />

        <TextBlock Text="{Binding Path=ViewModel.Error}" />

        <UniformGrid Grid.Row="2" Columns="2">

            <Button Command="{Binding SaveCommand}" />

            <Button Command="{Binding CancelCommand}" />

        </UniformGrid>

    </Grid>
</UserControl>

但是新的Dialog窗口只显示绑定到EditDialogViewModel的ViewModel属性的ContentControl(它保存正在编辑的ViewModel)。

我的猜测是它与ModelDialogManager中的代码有关:

 void Show()
    {
        if (_window != null) Close();

        Window w = new Window();
        _window = w;
        w.Closing += w_Closing;
        w.Owner = GetParentWindow(this);

        w.DataContext = this.DataContext;
        w.SetBinding(Window.ContentProperty, ""); //This code here does something I don't fully understand

        w.Title = Title;
        w.Icon = Icon;
        w.Height = DialogHeight;
        w.Width = DialogWidth;
        w.ResizeMode = DialogResizeMode;
        w.ShowDialog();
    }

他正在应用绑定,但我想这只是第一个被绑定的ContentControl或其他东西。这很棘手。

另一个问题是鼠标在模态对话框中不起作用。我可以选中文本框,但不要点击它们。

有没有办法解决这个或更好的方法来处理WPF中的模态对话框?

修改

好的我会承认的。我是个大白痴。这很简单,我只是看不到它。我已经将UserControl上的高度和宽度设置为固定值,而我仍然在弄乱它是一个窗口。所以实际上它显示了整个事情,只是没有空间。我不知道为什么鼠标在那时不起作用,但现在它完美无缺。

1 个答案:

答案 0 :(得分:2)

回答“更好的方法来处理WPF中的模态对话框?” WPF扩展工具包中有一个new control called Child Window来解决你的模态对话难题。

enter image description here