gpt4 book ai didi

caliburn.micro - 为 Caliburn 托管窗口启用始终位于顶部

转载 作者:行者123 更新时间:2023-12-04 05:37:34 32 4
gpt4 key购买 nike

我有以下 ViewModel,我正在使用 Caliburn Micro。 IWindowManager 实例已正确解析,并且所有代码都可以正常工作。如 TODO 注释所示,我需要获取对当前窗口的引用,以便切换 AlwaysOnTop 属性。我怎样才能做到这一点?

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

}

}

最佳答案

您可以使用 settings ShowWindow 的参数使用包含属性名-值对的字典在创建的窗口上设置任何属性(例如 Topmost )的方法:



windowManager.ShowWindow(new WizardViewModel(), 
settings: new Dictionary<string,object> { {"Topmost", AlwaysOnTop} });

如果要更改 Topmost已创建窗口的属性我看到三个选项(按优先顺序):
  • 创建 AlwaysOnTop WizardViewModel 上的属性(property)并将 View 模型存储在私有(private)字段中并委托(delegate)AlwaysOnTopWizardViewModel :

    private WizardViewModel wizardViewModel;

    public void FileDropped(DragEventArgs eventArgs)
    {
    //...
    wizardViewModel = new WizardViewModel()
    windowManager.ShowWindow(wizardViewModel);
    }

    public bool AlwaysOnTop
    {
    get { return Settings.Default.DropWindowAlwaysOnTop; }
    set
    {
    //...
    if (wizardViewModel != null)
    wizardViewModel.AlwaysOnTop = value;
    }
    }

    在您看来,您可以绑定(bind) WizardViewModelAlwaysOnTop属性到窗口的TopMost属性(property)。
  • 您可以使用 Application.Windows检索窗口。例如。设置Name使用设置字典创建窗口的属性,然后:

    windowManager.ShowWindow(new WizardViewModel(), 
    settings: new Dictionary<string,object>
    { {"Topmost", AlwaysOnTop}, {"Name", "WizardWindow"} });

    public bool AlwaysOnTop
    {
    get { return Settings.Default.DropWindowAlwaysOnTop; }
    set
    {
    //...
    var wizardViewModel = Application.Current.Windows.OfType<Window>()
    .SingleOrDefault(w => w.Name == "WizardWindow");
    if (wizardViewModel != null)
    wizardViewModel.AlwaysOnTop = value;
    }
    }
  • 源自 WindowManager并在您的 Bootstrapper 中注册然后你可以覆盖 CreateWindow , EnsureWindow等方法将创建的窗口存储在某处,设置附加属性等。
  • 关于caliburn.micro - 为 Caliburn 托管窗口启用始终位于顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729492/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com