我有一个自定义的GroupBox控件,除了应用样式
之外什么也没做<GroupBox x:Class="SharedResources.Controls.StyledGroupBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<GroupBox.Style>
<Style TargetType="{x:Type GroupBox}">
<Setter Property="BorderBrush" Value="#D5DFE5"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
...
<ContentPresenter Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="2"
Margin="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupBox.Style>
</GroupBox>
问题是当我来使用它时,如果我设置了StyledGroupBox内容的x:Name属性,那么我得到以下错误:
无法在元素''上设置名称属性值'name'。 ''属于元素'StyledGroupBox'的范围,在另一个范围内定义时已经注册了名称
我有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
不要仅使用UserControl
来定义Style
(我很想知道这种做法来自何处,因为我最近看到它爆炸了)。相反,将Style
作为资源创建,并根据需要将其应用于GroupBox:
<Style TargetType="{x:Type GroupBox}">
<Setter Property="BorderBrush" Value="#D5DFE5"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">...
<ContentPresenter Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="2" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...
<GroupBox>
Will inherit the above style.
</GroupBox>
答案 1 :(得分:0)
如果有人试图让这项工作(更多/不是样式),请参阅:How to create a WPF UserControl with NAMED content