Стиль кнопки WPF в зависимости от активного вида - PullRequest
3 голосов
/ 11 мая 2011

Я использую Caliburn Micro для разработки простого приложения MVVM WPF.

Мой ShellView имеет один ContentControl и три кнопки, каждая из которых связана с открытым методом в моей ShellViewModel, скажем, ActivateView1, ActivateView2 и ActivateView3.

Моя ShellViewModel наследует от Conductor, и каждый метод Activate вызывает ActivateItem(new View1ViewModel()) и т. Д.

Пока все хорошо.Когда я нажимаю кнопку, в ContentControl активируется новое представление.Проблема в том, что мне нужно, чтобы каждая кнопка меняла стиль, когда ее «связанный вид» активен, и я действительно не представляю, как добиться этой функциональности.Есть ли у вас какие-либо предложения?

Я довольно плохо знаком с Caliburn Micro и WPF-стайлингом, поэтому любая помощь будет высоко оценена.

Ответы [ 3 ]

1 голос
/ 12 мая 2011

Я не очень уверен в этом, но все же я могу думать о чем-то подобном,

, вы можете создать стиль и добавить стиль к своей кнопке.что-то вроде этого

<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>

, и вы можете добавить этот стиль к своей кнопке.

0 голосов
/ 15 ноября 2015

Вы можете использовать

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

Я думаю, что это делает трюк ...

0 голосов
/ 13 мая 2011

Я могу вспомнить два возможных варианта, которые вы могли бы использовать:

Вы можете привязать свойства стиля ваших кнопок к свойствам вашей 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.

...