wpf - WPF - 自定义窗口样式并使用图像最小化、最大化和关闭由不同数据触发的按钮
问题描述
我想使用自定义窗口样式并使用图像来最小化、最大化、正常和关闭按钮。
现在我希望当 WindowState 最大化时,显示最大化图像(来自资源)。
当 WindowState 为 Normal 时,显示 Normal 图像(来自资源)。
Xaml 如下:
<Button Height="42" Width="42" Background="Transparent" BorderBrush="Transparent" Click="Button_Maximize_Click">
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding WindowState}" Value="Maximized">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/AccuPick3D;component/Image/Maximize.png" Stretch="Uniform"/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding WindowState}" Value="Normal">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/AccuPick3D;component/Image/Restore.png" Stretch="Uniform"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<Button.ToolTip>
<ToolTip Style="{StaticResource ToolTipStyle}">Maximize or Restore</ToolTip>
</Button.ToolTip>
</Button>
Button_Maximize_Click 事件:
private void Button_Maximize_Click(object sender, RoutedEventArgs e)
{
this.WindowState = (this.WindowState != WindowState.Maximized) ? WindowState.Maximized : WindowState.Normal;
}
但无论我是否点击按钮,它都不会显示图像。
请帮助我,谢谢!
解决方案
不要Background
直接设置属性。Style
相反,您应该在setter中指定默认值:
<Button Height="42" Width="42" BorderBrush="Transparent" Click="Button_Maximize_Click">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<DataTrigger Binding="{Binding WindowState}" Value="Maximized">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/AccuPick3D;component/Image/Maximize.png" Stretch="Uniform"/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding WindowState}" Value="Normal">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/AccuPick3D;component/Image/Restore.png" Stretch="Uniform"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<Button.ToolTip>
<ToolTip Style="{StaticResource ToolTipStyle}">Maximize or Restore</ToolTip>
</Button.ToolTip>
</Button>
原因是本地属性集优先于样式设置器,如文档中所述。
您还应该确保您的绑定有效。除非您设置了DataContext
to this
,否则您应该RelativeSource
像这样设置绑定的属性以绑定到父窗口的属性:
Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}"
推荐阅读
- kubernetes - Fluentd 发送到 Splunk HEC:想要将 sourcetype 设置为命名空间
- ruby-on-rails - 使用没有自定义域的 AWS SES 发送电子邮件
- tensorflow - Keras 中基于相关性的序列标记损失函数
- android - 在多个 Android 模块之间共享 1 个依赖项实例
- messaging - Azure Service Bus 连接能否在 Azure Service Fabric 节点改组后继续存在?
- sql - 将垂直数据转换为具有枢轴但没有聚合的水平数据?
- javascript - react 和 axios 中的 Access-Control-Allow-Origin 问题
- c++ - 遇到换行符时getline崩溃
- ruby - Ruby Selenium ignoreProtectedModeSettings 不起作用
- naudio - 播放 g711 a-law 流时出现断断续续的声音