C# WPF如何实现类似MUI的激活时可变为Outlined样式的文本框
WPF 内置的TextBox控件本身没有提供你描述的这种 MUI 风格动态切换样式的能力,你可以通过两种方案实现需求:
方案1:使用成熟的第三方 WPF 控件库
现有两款主流控件库已经原生支持类似效果,仅需简单配置即可达到你的要求:
- MaterialDesignInXamlToolkit:WPF 生态下最完善的 Material Design 风格控件实现,内置的文本框控件默认支持聚焦时自动切换为 Outlined 轮廓样式,标签的位置默认是向上浮动,你可以通过修改内置样式的触发器,将标签位移逻辑调整为聚焦后向右移动即可。
- HandyControl:国内常用的轻量 WPF 控件库,文本框支持自定义占位标签的动态效果,仅需添加聚焦状态的样式规则,即可实现激活时标签右移、边框切换为 Outlined 样式的效果。
方案2:自定义封装原生控件实现(无需引入第三方依赖)
如果不想引入第三方库,你可以自行封装一个用户控件,组合Label和原生TextBox两个元素,通过TextBox的IsFocused属性触发样式变更即可:
- 非聚焦状态下,
Label水平对齐方式设为左对齐,TextBox边框设为默认浅色细线样式 - 聚焦状态触发时,通过触发器修改
Label的水平对齐为右对齐,同时修改TextBox的边框为你需要的 Outlined 高亮样式,还可以添加DoubleAnimation实现标签位移的平滑过渡效果,和 MUI 的动效保持一致。
核心触发器示例代码如下:
<Style TargetType="TextBox" x:Key="CustomMuiTextBox"> <Setter Property="BorderThickness" Value="1"/> <Setter Property="BorderBrush" Value="#EEEEEE"/> <Style.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderThickness" Value="2"/> <Setter Property="BorderBrush" Value="#1976D2"/> <!-- 此处可添加绑定的Label控件的位置切换Setter --> </Trigger> </Style.Triggers> </Style>
内容的提问来源于stack exchange,提问作者leon
相关产品推荐
相关产品推荐

