3

我正在使用 Caliburn Micro 开发一个简单的 MVVM WPF 应用程序。

我的 ShellView 有一个 ContentControl 和三个按钮,每个按钮都绑定到我的 ShellViewModel 中的一个公共方法,比如 ActivateView1、ActivateView2 和 ActivateView3。

我的 ShellViewModel 继承自 Conductor 和每个 Activate 方法调用ActivateItem(new View1ViewModel())等。

到目前为止,一切都很好。当我单击一个按钮时,ContentControl 中会激活一个新视图。问题是我需要每个按钮在其“关联视图”处于活动状态时更改样式,而我真的不知道如何实现此功能。你有什么建议吗?

我对 Caliburn Micro 和 WPF 样式相当陌生,因此将不胜感激任何帮助。

4

3 回答 3

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>

您可以将此样式添加到您的按钮。

于 2011-05-11T20:15:07.450 回答
0

我可以想到您可以使用的两种可能的选择:

您可以将按钮样式属性绑定到 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.

于 2011-05-13T04:14:40.513 回答
0

您可以使用

<Trigger Property ="IsPressed" Value ="True">

我认为它的伎俩...

于 2015-11-15T17:05:59.513 回答