2011-12-13 73 views
0

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

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

回答

0

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

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

0

我不知道这是你所期望的。打开模型从WPF为从打开一个在正常的窗口的应用,因为相同的弹出

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

问候 SREE

+0

这不是MVVM,作为OP问。 –

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

这实际上是一个相当复杂的话题。
#2有很多关于MVVM对话框信息的,因为使用的解决方案,如SREE的休息MVVM

这里是一个好去处,也开始 Handling Dialogs in WPF with MVVM

,在用户控件或主窗口打开一个弹出将是一样的。

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));    
     } 
    } 

/*硕士生是容器电网*/

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

结合这个概念与Opened/Closed事件的Popup

0

我知道这是一个古老的问题,但是当我做了这个搜索,我发现了很多相关的问题,但是我没有找到真正明确的答案。所以我自己实现一个dialogbox/messagebox/popin,并且我分享它!
https://stackoverflow.com/a/40135791/2546739
是表示这样的事情:
2