我正在使用Caliburn Micro开发一个简单的MVVM WPF应用程序。
我的ShellView有一个ContentControl和三个按钮,每个按钮绑定到我的ShellViewModel中的公共方法,比如说ActivateView1,ActivateView2和ActivateView3。
我的ShellViewModel继承自Conductor,每个Activate方法都调用ActivateItem(new View1ViewModel())
等。
到目前为止一切顺利。单击按钮时,将在ContentControl中激活新视图。问题是我需要每个按钮在其“关联视图”处于活动状态时更改样式,我真的不知道如何实现此功能。你有什么建议吗?
我对Caliburn Micro和WPF造型相当陌生,所以我们非常感谢任何帮助。
答案 0 :(得分:1)
我对此不太确定,但我仍然可以想到这样的事情,
您可以创建样式并将样式添加到按钮中。像这样的东西
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Fill" TargetName="yourButtonName" Value="Black"/>
<Setter Property="Margin" TargetName="yourButtonName" Value="5,0,5,0"/>
</Trigger>
</Style.Triggers>
</Style>
您可以将此样式添加到按钮中。
答案 1 :(得分:0)
我可以想到两种可能的选择:
您可以将按钮样式属性绑定到ShellViewModel上的属性。在这些属性中,您可以根据shell活动视图确定要返回的样式,即
return ActiveItem == button1ViewModel ?
(Style) App.Current.Resources["Button1ActiveStyleKey"] :
(Style) App.Current.Resources["Button1InactiveStyleKey"];
这意味着您的ViewModel会知道您可能不想要的样式。如果是这种情况,那么选择两个就是编写一个Caliburn.Micro IResult
来改变按钮的样式,并从通过按钮点击调用的Coroutine返回其中的3个(每个按钮一个),即< / p>
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
参数提供给IResult.Execute
),以获取名称提供给ChangeButtonStyle
的第一个参数的控件ctor,然后使用作为ChangeButtonStyle
ctor的第二个参数提供的资源键设置该控件的style属性。
答案 2 :(得分:0)
您可以使用
<Trigger Property ="IsPressed" Value ="True">
我认为这样做了......