模态弹出窗口在WPF中的usercontrol上

时间:2011-12-13 05:51:58

标签: wpf mvvm user-controls popup

如何使用mvvm模式在wpf中的用户控件(而非主窗口)上打开模式弹出窗口?

我希望我的问题清楚,因为我想在usercontrol上打开popup而不是在窗口上。

6 个答案:

答案 0 :(得分:0)

Modal适用于新窗口而非usercontrols。 usercontrol只是页面或窗口内的控件。

因此,如果你想让它成为模态,那么让用户控制覆盖窗口的整个区域,只有当它们完成了它的内容后才能关闭它。甚至可能会使其中一些部分透明,如果你愿意,它看起来像一个弹出窗口。

答案 1 :(得分:0)

我不知道这是你期待的那个。打开从wpf弹出的模型与在普通Windows应用程序中打开模型一样

**ModalWin objWin = new ModalWin();
objWin.ShowDialog();**

此致 SREE

答案 2 :(得分:0)

模态通常表示对应用程序的模态,或者对于窗口,弹出窗口的情况。不是为了特定的控制。

如果要在显示弹出窗口时禁用特定控件,可以在触发器中执行此操作:

<Popup x:Name="popup">
    <!-- ... -->
</Popup>
<UserControl>
    <UserControl.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsOpen, ElementName=popup}"
                             Value="True">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </UserControl.Style>
<UserControl>

答案 3 :(得分:0)

这实际上是一个相当复杂的话题 Stackoverflow在MVVM中有很多关于对话框的信息,因为使用像Sree这样的解决方案打破MVVM

这是一个很好的起点 Handling Dialogs in WPF with MVVM

此外,在usercontrol或主窗口上打开弹出窗口也是一样。

答案 4 :(得分:0)

使用装饰品。

public class OpaqueAdorner : Adorner
    {
        public OpaqueAdorner(UIElement win)
            : base(win)
        { }

        protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
        {
            SolidColorBrush renderBrush = new SolidColorBrush(Colors.LightCoral);
            renderBrush.Opacity = 0.3;
            Pen renderPen = new Pen(new SolidColorBrush(Colors.DarkBlue), 5.0);

            drawingContext.DrawRectangle(renderBrush, renderPen,
                new Rect(new Point(0, 0), AdornedElement.DesiredSize));            
        }
    }

/ * Grd是容器Grid * /

private void Btn_Click(object sender, RoutedEventArgs e)
    {
        //GetAdornerLayer was missing ')'
        AdornerLayer.GetAdornerLayer(Grd).Add(new OpaqueAdorner(Grd));
    }

将此概念与Opened / Closed的{​​{1}}事件相结合。

答案 5 :(得分:0)

我知道这是一个老问题,但是当我进行此搜索时,我发现了很多相关的问题,但我没有找到一个非常明确的回答。所以我自己实现了一个dialogbox / messagebox / popin,我分享了它! https://stackoverflow.com/a/40135791/2546739
它显示的是这样的事情:
2