如何使用 mvvm 模式在 wpf 中的用户控件(而不是主窗口)上打开模式弹出窗口?
我希望所有人都清楚我的问题,因为我想在用户控件上而不是窗口上打开弹出窗口。
模态适用于新窗口而不是用户控件。用户控件只是页面或窗口内的控件。
因此,如果您想使其成为模式,请让用户控件覆盖窗口的整个区域,并且只有在完成其中的操作后才能将其关闭。如果您愿意,甚至可以将其中一些部分透明,这样它看起来就像一个弹出窗口。
我不知道这是你所期待的。从 wpf 中打开弹出模型与在普通 Windows 应用程序中打开模型相同
**ModalWin objWin = new ModalWin();
objWin.ShowDialog();**
问候 斯里
模态通常表示应用程序的模态,或者在弹出窗口的情况下,表示窗口的模态。不适用于特定控制。
如果您想在显示弹出窗口时禁用特定控件,您可以在触发器中执行此操作:
<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
这是一个很好的起点 使用 MVVM 处理 WPF 中的对话框
此外,在用户控件或主窗口上打开弹出窗口将是相同的。
我知道这是一个老问题,但是当我进行此搜索时,我发现了很多相关问题,但没有找到真正明确的答案。所以我自己实现了一个对话框/消息框/popin,并分享它!
https://stackoverflow.com/a/40135791/2546739
它显示的是这样的东西:
使用装饰器。
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
事件结合起来。