【发布时间】:2014-08-18 10:18:53
【问题描述】:
我正在尝试自定义用户控件的样式,继承其样式并为其添加一些额外的样式。我做了一个小项目来试试这个。假设我有一个名为 UserControl1 的用户控件(它包含的内容无关紧要 - 在我的示例项目中它是空的)。
我在我的MainWindow 中使用它如下:
<Window x:Class="WpfStyleInheritance.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfStyleInheritance"
Title="MainWindow" Height="350" Width="525">
<Grid>
<local:UserControl1>
<local:UserControl1.Style>
<Style TargetType="{x:Type local:UserControl1}" BasedOn="{x:Type local:UserControl1}">
<Setter Property="Margin" Value="0" />
</Style>
</local:UserControl1.Style>
</local:UserControl1>
</Grid>
</Window>
在BasedOn 部分,我收到了错误:
无法分配指定的值。应为以下类型:“样式”。
如果我将其更改为 BasedOn="{StaticResource {x:Type local:UserControl1}}",则会收到错误消息:
无法解析资源“{x:Type local:UserControl1}”。
我怎样才能让它工作并从此过上幸福的生活?
编辑:正如我在此处的答案的 cmets 中发布的那样,如果我走 StaticResource 路线并运行,我会收到带有消息的 XamlParseException:
找不到名为“WpfStyleInheritance.UserControl1”的资源。资源名称区分大小写。
附加信息:如果我将 MainWindow 标记中的所有 local:UserControl1 实例替换为 Button,则效果非常好。问题出在用户控件上。
编辑 2:如果我在 UserControl 中添加样式,问题仍然存在:
<UserControl.Style>
<Style TargetType="UserControl">
<Setter Property="Height" Value="0" />
</Style>
</UserControl.Style>
【问题讨论】:
标签: c# wpf user-controls