我有一个问题,但在统计中,我将向您描述我在问什么。
我正在使用Caliburn.Micro Framework开发应用程序。我想做的是制作多个ActiveItem
(如UserControl
)但同时显示一个。像这样:
<ContentControl x:Name="ActiveItem_1"/>
<ContentControl x:Name="ActiveItem_2"/>
<ContentControl x:Name="ActiveItem_3"/>
<ContentControl x:Name="ActiveItem_4"/>
我选择按UserControl
显示哪个Buttons
所以我只想同时打开一个UserControl
(当我打开一个using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TaskManager.ViewModels
{
class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
public void LoadLoginPage()
{
ActivateItem(new LoginViewModel());
}
public void LoadTasksPage()
{
//And here i have no idea what to do,
//how to make another UserControl to be ActiveItem
}
}
}
时,不允许打开第二个)。
我的ViewModel.cs看起来像这样:
preg_match("#viewbox=[\"']\d* \d* (\d*) (\d*)#i", file_get_contents('file.svg'), $d);
$width = $d[1];
$height = $d[2];
那么,如何命名或编码这两个用户控件成为OneActive?我可以使用一个UserControl并更改其大小和边距,但是我认为它比更改UserControls更为复杂
感谢您的建议!
答案 0 :(得分:1)
如果我正确理解了这一点,则您希望拥有4个内容控件,但任何时候只有一个包含一个视图。即您按下按钮1时,内容控件1会显示一个视图,但是当您单击另一个按钮时,内容控件1就会消失,并且会填充新按钮的内容控件?
您不能使用ActivateItem,因为ActivateItem要求您有一个名为ActiveItem的内容控件。
您需要执行以下操作:
Button1ViewModel ActiveItem_1 = null;
Button2ViewModel ActiveItem_2 = null;
Button3ViewModel ActiveItem_3 = null;
Button4ViewModel ActiveItem_4 = null;
public void Button1()
{
if (ActiveItem_1 == null)
ActiveItem_1 = new Button1ViewModel();
if (ActiveItem_2 != null)
{
ActiveItem_2.TryClose();
ActiveItem_2 = null;
}
if (ActiveItem_3 != null)
{
ActiveItem_3.TryClose();
ActiveItem_3 = null;
}
if (ActiveItem_4 != null)
{
ActiveItem_4.TryClose()
ActiveItem4 = null;
}
}
对其他按钮执行类似操作,分别为每个按钮打开正确的视图模型,然后关闭其他按钮。
确实,您应该执行OneActive并只有一个名为ActiveItem的contentcontrol,并且每次单击按钮之一时都会填充该控件。只要您不设置明确的大小,contentcontrol就会调整为您的视图的大小(或者您可以将所有视图设计为相同的大小)。