自定义WPF GroupBox中包含的命名控件

时间:2011-06-14 10:59:41

标签: wpf

我有一个自定义的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'的范围,在另一个范围内定义时已经注册了名称

我有什么想法可以解决这个问题吗?

2 个答案:

答案 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