Caliburn.micro 为Caliburn托管窗口启用始终在顶部
我有下面的ViewModel,我使用的是Caliburn Micro。IWindowManager实例已正确解析,所有代码都正常工作。如TODO注释所示,我需要获取对当前窗口的引用,以便切换AlwaysOnTop属性。我该怎么做Caliburn.micro 为Caliburn托管窗口启用始终在顶部,caliburn.micro,Caliburn.micro,我有下面的ViewModel,我使用的是Caliburn Micro。IWindowManager实例已正确解析,所有代码都正常工作。如TODO注释所示,我需要获取对当前窗口的引用,以便切换AlwaysOnTop属性。我该怎么做 namespace CaliburnWizardPlay { [Export(typeof(DropWindowViewModel))] public class DropWindowViewModel : PropertyChangedBase, IHaveDispl
namespace CaliburnWizardPlay
{
[Export(typeof(DropWindowViewModel))]
public class DropWindowViewModel : PropertyChangedBase, IHaveDisplayName
{
private readonly IWindowManager windowManager;
[ImportingConstructor]
public DropWindowViewModel(IWindowManager windowManager)
{
this.windowManager = windowManager;
}
public string DisplayName
{
get { return "Main Window"; }
set { }
}
public bool AlwaysOnTop
{
get { return Settings.Default.DropWindowAlwaysOnTop; }
set
{
Settings.Default.DropWindowAlwaysOnTop = value;
Settings.Default.Save();
NotifyOfPropertyChange(() => AlwaysOnTop);
//todo: toggle the AOT attribute of the window
}
}
public void FileDropped(DragEventArgs eventArgs)
{
if (eventArgs.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] droppedFilePaths = eventArgs.Data.GetData(DataFormats.FileDrop, true) as string[];
foreach (string path in droppedFilePaths)
{
MessageBox.Show(path);
}
windowManager.ShowWindow(new WizardViewModel());
}
}
}
}您可以使用
ShowWindow
方法的settings
参数,使用包含propertyname值对的字典在创建的窗口上设置任何属性(例如):
windowManager.ShowWindow(新向导ViewModel(),
设置:新字典{{“最顶层”,AlwaysOnTop});
如果要更改已创建窗口的最顶部的
属性,我将看到三个选项(按首选项的顺序):
WizardViewModel
上创建AlwaysOnTop
属性,将viewmodel存储在专用字段中,并将AlwaysOnTop
委托给WizardViewModel
:
私有向导视图模型向导视图模型;
已删除公共无效文件(DragEventArgs eventArgs)
{
//...
wizardViewModel=新wizardViewModel()
windowManager.ShowWindow(wizardViewModel);
}
公共场所
{
获取{return Settings.Default.DropWindowAlwaysOnTop;}
设置
{
//...
if(wizardViewModel!=null)
wizardViewModel.AlwaysOnTop=值;
}
}
在您的视图中,您可以将WizardViewModel
的AlwaysOnTop
属性绑定到窗口的Top
属性名称
属性,然后:
windowManager.ShowWindow(新向导ViewModel(),
设置:新字典
{{“最上面的”,总是最上面的,{“名字”,“向导窗口”});
公共场所
{
获取{return Settings.Default.DropWindowAlwaysOnTop;}
设置
{
//...
var-wizardViewModel=Application.Current.Windows.OfType()
.SingleOrDefault(w=>w.Name==“向导窗口”);
if(wizardViewModel!=null)
wizardViewModel.AlwaysOnTop=值;
}
}
WindowManager
派生并在Bootstrapper
中注册它,然后您可以覆盖CreateWindow
,EnsureWindow
等方法,将创建的窗口存储在某处,并设置其他属性等我的问题不清楚,或者没有人知道设置属性的方法吗?@michaelkoss使用当前的Caliburn API,您无法获取所创建窗口的引用。没有那么简单,请参阅我的更新答案。越来越近,但我需要设置具有AlwaysOnTop属性的窗口的最顶端,不是新创建的WizardViewModel——我的示例代码中的DropWindowViewModel。但我认为你的解决方案#3也会奏效,因为(我相信)Caliburn会使用我的iWindows管理器打开应用程序的第一个窗口。