WPF 使用触发器让窗口无法最大化且同时可以调整窗口大小
先上代码:
<Window.Style> <Style TargetType="{x:Type Window}"> <Setter Property="WindowState" Value="{Binding Tag, RelativeSource={RelativeSource Mode=Self}, UpdateSourceTrigger=PropertyChanged,Delay=100}"/> <Style.Triggers> <Trigger Property="WindowState" Value="Maximized"> <Trigger.EnterActions> <BeginStoryboard x:Name="bs"> <Storyboard Storyboard.TargetProperty="Tag" Duration="0:0:0" > <ObjectAnimationUsingKeyFrames> <DiscreteObjectKeyFrame KeyTime="0:0:0"> <DiscreteObjectKeyFrame.Value> <WindowState>normal</WindowState> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> <Trigger.ExitActions> <RemoveStoryboard BeginStoryboardName="bs"/> </Trigger.ExitActions> </Trigger> </Style.Triggers> </Style> </Window.Style>
主要思路让windowstatte绑定到一个无关紧要的且具有propertychanged的属性上。
所以Tag是首选。
其次是先让windowstate绑定到tag,最主要的是代码delay让数据有一个缓冲的阶段。
同时使用触发器将值写入到tag中即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现