当发生某些事情时更改控制属性- WPF xaml



我有一个菜单按钮,当点击时打开一个窗口。

我想改变它的颜色时,它被点击和恢复时,窗口关闭

我想使用触发器来改变它的颜色点击时,但我怎么能知道当窗口关闭改变颜色回来?

我需要MVVM方式,所以我不喜欢使用

后面的代码

与视图模型齐头并进的模式之一是事件聚合器。基本要点是创建一个消息总线,允许感兴趣的对象订阅其他对象可能触发的特定事件,而不需要在两者之间直接耦合。

你的主视图模型可能会订阅一个WindowClosed事件(它提供了一个标识符来确定哪个特定的窗口已经关闭)。当对话框关闭时,它的视图模型将负责触发事件。

当您的视图模型接收到事件时,它将更新属性,您的菜单项的触发器绑定到。

如果你使用mvvm,那么你希望使用IWindowService来打开你的窗口。如果你这样做,你的视图模型知道什么时候服务/窗口关闭,你可以使用一个布尔值绑定到你的触发器。

我假设你是从绑定到按钮的Command属性的ViewModel内实例化和第二个窗口。这通常是在MVVM中处理这种情况的方式。这允许您在ViewModel中创建另一个属性来查询窗口是否打开。

private Window _secondWindow = null;
public bool SecondWindowIsOpen
{
  get { return _secondWindow != null; }
}

然后在你的XAML中,你可以将按钮的BackgroundColor绑定到这个属性,并使用触发器来确定颜色。

<Window.Resources>
  <Style x:Key="WindowIsOpenButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
      <DataTrigger Binding="{Binding SecondWindowIsOpen}" Value="True">
        <Setter Property="Background" Value="Green" />                    
      </DataTrigger> 
    </Style.Triggers>
  </Style>
</Window.Resources>
<Grid>
  <Button Background="Yellow" Command="{Binding OpenSecondWindow}" Style="{StaticResource WindowIsOpenButtonStyle}" />
</Grid>

现在,当窗口打开时,按钮的背景颜色将变为黄色,当它再次关闭时,它将恢复到原来的颜色

你可以使用一个togglebutton,将IsChecked属性绑定到一些布尔值,以保持窗口是否打开/关闭的状态。

希望有帮助

你可以订阅你的窗口的关闭事件,在该事件中你可以设置你的任何bool属性,像这样-

private void Border_MouseEnter(object sender, MouseEventArgs e)
{
   Window w = new Window();
   w.Closed += new EventHandler(w_Closed);
}
void w_Closed(object sender, EventArgs e)
{
   // Set your property here to true
}

简单地说,你可以在你的Trigger中使用该属性来改变你的菜单项的颜色。

最新更新