我可以想到您可以使用的两种可能的选择:
您可以将按钮样式属性绑定到 ShellViewModel 上的属性。在这些属性中,您可以根据外壳活动视图确定要返回的样式,即
return ActiveItem == button1ViewModel ?
(Style) App.Current.Resources["Button1ActiveStyleKey"] :
(Style) App.Current.Resources["Button1InactiveStyleKey"];
这意味着您的 ViewModel 会知道您可能不想要的样式。如果是这种情况,选项二是编写一个 Caliburn.MicroIResult
来更改按钮的样式,并从通过按钮单击调用的协程返回其中的 3 个(每个按钮一个),即
public IEnumerable<IResult> ButtonOneClicked()
{
yield return new ChangeButtonStyle("Button1Name", "Button1ActiveStyleKey");
yield return new ChangeButtonStyle("Button2Name", "Button2InactiveStyleKey");
yield return new ChangeButtonStyle("Button3Name", "Button3InactiveStyleKey");
}
的实现ChangeButtonStyle IResult
将搜索视图(通过ActionExecutionContext
参数 to提供IResult.Execute
)以查找具有提供给 ctor 的第一个参数的名称的控件,然后使用作为第二个参数提供给ctorChangeButtonStyle
的资源键设置该控件的样式属性ChangeButtonStyle
.