如何使用mvvm模式在wpf中的用户控件(而非主窗口)上打开模式弹出窗口?
我希望我的问题清楚,因为我想在usercontrol上打开popup而不是在窗口上。
答案 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
它显示的是这样的事情: