WPF 中用户控件的模态弹出窗口

问题描述 投票:0回答:6

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

我希望所有人都清楚我的问题,因为我想在用户控件上而不是窗口上打开弹出窗口。

wpf mvvm user-controls popup
6个回答
0
投票

模态适用于新窗口而不是用户控件。用户控件只是页面或窗口内的控件。

因此,如果您想使其成为模式,请让用户控件覆盖窗口的整个区域,并且只有在完成其中的操作后才能将其关闭。如果您愿意,甚至可以将其中一些部分透明,这样它看起来就像一个弹出窗口。


0
投票

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

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

问候 斯里


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>

0
投票

这其实是一个相当涉及的话题。
Stackoverflow 有很多关于 MVVM 中对话框的信息,因为使用 Sree 等解决方案会破坏 MVVM

这是一个很好的起点 使用 MVVM 处理 WPF 中的对话框

此外,在用户控件或主窗口上打开弹出窗口将是相同的。


0
投票

我知道这是一个老问题,但是当我进行此搜索时,我发现了很多相关问题,但没有找到真正明确的答案。所以我自己实现了一个对话框/消息框/popin,并分享它!
https://stackoverflow.com/a/40135791/2546739
它显示的是这样的东西:
2


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
Popup
事件结合起来。

© www.soinside.com 2019 - 2024. All rights reserved.