<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CuratioCMS.Client.UI.Controls">
<Style BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type local:ImageButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ImageButton}">
<StackPanel Height="Auto" Orientation="Horizontal">
<Image Width="20"
Height="20"
Margin="10,4,0,4"
Source="{Binding Path=Image,
RelativeSource={RelativeSource TemplatedParent}}"
Stretch="Fill" />
<TextBlock Margin="5,0,10,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="12"
FontWeight="Bold"
Foreground="{TemplateBinding Foreground}"
Text="{TemplateBinding Label}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是用于ImageButton自定义控件的Generic.xaml中的代码。 whit工作正常,但我不能从Base按钮陈旧继承,所以不是从Button继承所有基本样式,而是只创建没有任何基本样式的自定义控件,并且
BasedOn="{StaticResource {x:Type Button}}"
在VS内部,显示错误,表示找不到资源'{x:Type System.Windows.Controls.Button}'
我不知道如何实现所需的样式以及为什么在Visual Studio编辑器中出现此错误消息
答案 0 :(得分:0)
您正在基于通用按钮样式(在Generic.xaml中)定义样式,然后重新定义样式的模板。通过这种方式,基本样式将被覆盖。
如果你想改变一下风格,你有两个选择:
选项1:
TargetType="{x:Type Button}"
查找Generic.xaml中定义的样式,并将x:Key="someName"
添加到其属性中){StaticResource someName}
{StaticResource someName}
选项2:
选项2通常是一个更好的解决方案,因为它不需要进行大量更改,但我已经完成了你想要做的事情,而且我没有找到任何方法来避免重复的样式代码