WPF设置Button Width引用StaticResource报错,求问错误原因
问题分析与解决方法
嘿,这个错误我之前写WPF样式的时候也踩过坑!咱们来一步步捋清楚问题出在哪:
错误根源
你定义的 <Style x:Key="Small"> 是一个按钮样式资源,但你在 DefaultButtonStyleSmall 里把它直接赋值给了 Width 属性——而 Width 需要的是一个数值类型的值(比如80这种double数字),根本不是Style对象,所以WPF才会报错说“System.Window.Style 不是 Width 属性的有效值”。
两种正确的解决方式
方式1:把"Small"改成数值资源
如果你只是想复用一个固定的宽度值,应该把它定义成数值资源,而不是Style:
<!-- 首先要在XAML根节点引入sys命名空间 --> xmlns:sys="clr-namespace:System;assembly=mscorlib" <!-- 定义数值资源 --> <sys:Double x:Key="SmallButtonWidth">80</sys:Double> <!-- 然后在样式里引用这个数值 --> <Style x:Key="DefaultButtonStyleSmall" TargetType="Button" BasedOn="{StaticResource ButtonBaseStyle}"> <Setter Property="Width" Value="{StaticResource SmallButtonWidth}" /> </Style>
方式2:用Style继承来复用样式
如果你的"Small"样式本身就是要给按钮设置宽度,那可以让DefaultButtonStyleSmall直接继承自"Small"样式,这样就不用重复设置Width了:
<Style x:Key="Small" TargetType="Button" BasedOn="{StaticResource ButtonBaseStyle}"> <Setter Property="Width" Value="80"/> </Style> <Style x:Key="DefaultButtonStyleSmall" TargetType="Button" BasedOn="{StaticResource Small}" />
总结
核心问题就是你混淆了样式资源和数值资源的用途——Width属性需要的是具体的尺寸数值,而不是一个完整的按钮样式。选上面两种方式里适合你需求的就行~
内容的提问来源于stack exchange,提问作者Tinsley
相关产品推荐
相关产品推荐

