wpf-动态设置组件【按钮为例】样式

文章速览

坚持记录实属不易,希望友善多金的码友能够随手点一个赞。
共同创建氛围更加良好的开发者社区!
谢谢~

解决方案

创建一个Converter,返回对应的style实现对应的修改

创建多个样式

将创建的样式与Converter的属性绑定

利用Binding 将vm中的属性作为Converter的传参实现动态样式功能

具体实现

Converter 部分

创建一个Converter根据传参,返回相应的样式

csharp 复制代码
    public class ConditionToStyleConverter : IValueConverter
    {
        public Style CurrentStyle { get; set; }
        public Style OptionalStyle { get; set; }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (bool)value ? CurrentStyle : OptionalStyle ;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return new InvalidOperationException();
        }
    }
}

创建样式

xml 复制代码
<Grid.Resources>
	<Style x:Key = "FirstStyle" TargetType="{x:Type Button}" BasedOn = "{StaticResource OptionalStyle}"/>
		<Style x:Key = "FirstStyle" TargetType="{x:Type Button}" BasedOn = "{StaticResource CurrentStyle}"/>
		<local:ConditionToStyleConverter
		 	x:Key = "ConditionToStyleConverter"
		 	CurrentStyle = "{StaticResource CurrentStyle}"
		 	OptionalStyle = "{StaticResource OptionalStyle}"/>
</Grid.Resources>

Binding样式

xml 复制代码
<Button Style="{Binding IsSucceed}",Converter = {StaticResource ConditionToStyleConverter}"/>
相关推荐
Macbethad1 天前
如何用WPF做工控设置界面
java·开发语言·wpf
csdn_aspnet1 天前
WPF 做一个简单的电子签名板(一)
c#·wpf
玖笙&1 天前
✨WPF编程进阶【7.2】:动画类型(附源码)
c++·c#·wpf·visual studio
·心猿意码·1 天前
WPF中TemplatePart机制详解
wpf
FuckPatience3 天前
WPF 使用UserControl / ContentControl显示子界面
wpf
wangnaisheng3 天前
【WPF】WrapPanel的用法
wpf
源之缘-OFD先行者4 天前
10 万雷达点迹零卡顿回放:WPF + Vortice.Direct2D 多线程渲染实战
wpf
猫林老师4 天前
Flutter for HarmonyOS开发指南(九):测试、调试与质量保障体系
flutter·wpf·harmonyos
LateFrames4 天前
做【秒开】的程序:WPF / WinForm / WinUI3 / Electron
electron·c#·wpf·winform·winui3·claude code
beyond谚语4 天前
第四章 依赖项属性
wpf