Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中用户控件的模式弹出窗口_Wpf_Mvvm_User Controls_Popup - Fatal编程技术网

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

WPF中用户控件的模式弹出窗口,wpf,mvvm,user-controls,popup,Wpf,Mvvm,User Controls,Popup,如何使用mvvm模式在wpf中的用户控件(而不是主窗口)上打开模式弹出窗口 我希望我的问题对所有人来说都是清楚的,因为我想在用户控件上而不是在窗口上打开弹出窗口。模式用于新的窗口而不是用户控件。usercontrol只是页面或窗口中的一个控件 因此,如果你想让它成为模态,那么让用户控件覆盖你窗口的整个区域,只有当他们完成了其中的内容后,它才能关闭。如果您愿意的话,甚至可以将其中的一些部分透明,使其看起来像一个弹出窗口。我不知道这是您所期望的。从wpf打开模型弹出窗口与在普通windows应用程序

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


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

模式用于新的窗口而不是用户控件。usercontrol只是页面或窗口中的一个控件


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

我不知道这是您所期望的。从wpf打开模型弹出窗口与在普通windows应用程序中打开模型弹出窗口相同

**ModalWin objWin = new ModalWin();
objWin.ShowDialog();**
问候
Sree

模式通常指应用程序的模式,或者在弹出窗口的情况下,指窗口的模式。不适用于特定控件

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

<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>

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

这是一个好的开始

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

使用装饰器

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是容器网格*/

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

将这个概念与
Opened/Closed
事件
Popup
结合起来,我知道这是一个老问题,但是当我搜索时,我发现了很多相关的问题,但我没有找到一个真正清晰的答案。因此,我自己实现了dialogbox/messagebox/popin,并与大家分享

它展示了这样的东西:

正如OP所问,这不是MVVM。