C#WPF - 在另一个控件事件发生时更改控件内容

时间:2017-11-16 19:36:09

标签: c# wpf mvvm binding

我对WPF和MVVM很陌生,我尝试使用所有标准WindowChrome功能创建自定义Window。我正在努力应对最大化/最小化窗口Button内容:我想要在用户双击WindowChrome栏时更改内容,以便显示正确的图标:

enter image description here

当我双击该栏时,结果应为:

enter image description here

我设法使用按钮Triggers更改了内容,但是如何在发生其他控制事件时更改内容?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

为按钮指定一个带有触发器的样式,该触发器根据Window.WindowState的值设置内容。这不是一个事件。该按钮反映窗口的当前状态。

<Style TargetType="Button">
    <Style.Triggers>
        <DataTrigger 
            Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}"
            Value="Maximized">
            <Setter Property="Content">
                <Setter.Value>
                    <!-- I don't know if you're using a Path or what -->
                    <Path Stroke="White" Data="..." />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger 
            Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}"
            Value="Normal">
            <Setter Property="Content">
                <Setter.Value>
                    <!-- I don't know if you're using a Path or what -->
                    <Path Stroke="White" Data="..." />
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

设置按钮的模板会更明智,因为每个路径只有一个副本,如果您重复使用该样式两次,则无法共享它们。

如果有一些原因导致您无法使用您的代码,请告诉我您的代码。