使每个实例的组框的 header 唯一

Making the header of a group box unique for each instance

我创建了一个 Groupbox 资源目录,并创建了一个影响组框的样式。

这是我的 Resource Directory 代码:

<Style x:Key="grpNumbers" TargetType="GroupBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GroupBox">
                <Border
                    BorderThickness="1"
                    BorderBrush="#25A0DA" CornerRadius="10">
                    <Label HorizontalAlignment="Left" Content="Carrier" Foreground="White" Background="#151515" Height="38" 
                          Margin="30,-195,0,0"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

问题是我不希望组框样式与 Label 中的 Content 耦合

目前它在 mainwindow 中像这样被实例化:

<GroupBox Style="{StaticResource ResourceKey=grpNumbers}" Grid.Column="1"  BorderBrush="#272727" Grid.Row="1" Height="200" Margin="20"  HorizontalAlignment="Stretch" Header="Carrier information" Foreground="White" FontSize="20" BorderThickness="0.2">
</GroupBox>

但显然上述组框的 Header 标签并没有覆盖我的自定义组框的 header 但我也需要它,可以这样做吗?

ContentTemplate中的Label可以使用TemplateBinding绑定Header:

<Label Content="{TemplateBinding Header}"/>

你也应该像这样修改你的风格:

<Style x:Key="grpNumbers" TargetType="{x:Type GroupBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupBox}">
                <Grid>
                    <Border BorderThickness="1"
                            BorderBrush="#25A0DA" 
                            CornerRadius="10">
                        <Label HorizontalAlignment="Left" 
                               Content="{TemplateBinding Header}"
                               Foreground="White" 
                               Background="#151515" 
                               Height="38" 
                               Margin="30,-195,0,0"/>
                    </Border>
                    <!-- Responsible for displaying what you put inside of your GroupBox -->
                    <ContentPresenter Margin="5,25,5,5" />                        
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后可以这样使用:

<GroupBox Style="{StaticResource grpNumbers}" 
          Grid.Column="1"
          BorderBrush="#272727" 
          Grid.Row="1" 
          Height="200" 
          Margin="20"  
          HorizontalAlignment="Stretch" 
          Header="Carrier information" 
          Foreground="White" 
          FontSize="20" 
          BorderThickness="0.2">
    <TextBox /> <!-- or whatever you want inside your GroupBox -->
</GroupBox>