Я могу вспомнить два возможных варианта, которые вы могли бы использовать:
Вы можете привязать свойства стиля ваших кнопок к свойствам вашей ShellViewModel. В этих свойствах вы можете определить стиль для возврата на основе активного представления оболочек, т.е.
return ActiveItem == button1ViewModel ?
(Style) App.Current.Resources["Button1ActiveStyleKey"] :
(Style) App.Current.Resources["Button1InactiveStyleKey"];
это будет означать, что ваша ViewModel будет знать о стилях, которые вы, возможно, не хотите. В этом случае второй вариант - написать Caliburn.Micro IResult
, который изменяет стиль кнопки и возвращает 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
для IResult.Execute
) для элемента управления с именем, предоставленным для 1-го параметра ChangeButtonStyle
ctor, и затем устанавливать свойство стиля этого элемента управления, используя ключ ресурса, предоставленный в качестве второго параметра для ChangeButtonStyle
ctor.