如何更改 re-used UserControl 上的 WPF GroupBox Header

How to change a WPF GroupBox Header on re-used UserControl

我正在寻找一种方法来更改包含 XAML 的 re-used 用户控件上的 header。

用户控制:

<UserControl x:Class="ReusableControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="150" d:DesignWidth="300">
<Grid>
<GroupBox Header="Config Number">
    <Grid Name="MyConfig">
        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="60" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80" />
            <ColumnDefinition Width="*" MinWidth="100"/>
        </Grid.ColumnDefinitions>

        <Label Name="Value1Label" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left">Value 1</Label>
            <TextBox Grid.Row="0" Grid.Column="1" 
            HorizontalContentAlignment="Left" VerticalContentAlignment="Center"
            IsEnabled="True" Margin="5,5,5,5">
                <TextBox.Text>
                    <Binding Path="Value1" StringFormat="{}{0:0.0#######}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" />
                </TextBox.Text>
        </TextBox>


        <Label Name="Value2Label" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left">Value 2</Label>
            <TextBox Grid.Row="1" Grid.Column="1"
            HorizontalContentAlignment="Left" VerticalContentAlignment="Center"
            IsEnabled="True" Margin="5,5,5,5">
            <TextBox.Text>
                <Binding Path="Value2" StringFormat="{}{0:0.0#######}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" />
            </TextBox.Text>
        </TextBox>

     </Grid>
</GroupBox>

</Grid>

包含[=36​​=]:

<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:StackExchangeQuestion"
Title="MainWindow" Height="500" Width="525">

<Grid>
    <StackPanel Orientation="Vertical">
        <local:ReusableControl x:Name="Config1" />
        <local:ReusableControl x:Name="Config2" />
        <local:ReusableControl x:Name="Config3" />
    </StackPanel>
</Grid>

目的是让连续的控件说 "Config 1"、"Config 2"、Config 3",而不是 "Config Number" 三遍。

在此先感谢您的帮助!

在你的 ReusableControl.xaml.cs 中定义一个 DependencyProperty 像这样:

public string Header
{
    get { return (string)GetValue(HeaderProperty); }
    set { SetValue(HeaderProperty, value); }
}
public static readonly DependencyProperty HeaderProperty =
    DependencyProperty.Register("Header",
        typeof(string), typeof(ReusableControl));

现在您可以使用此 Header 属性 作为内部 GroupBoxHeader 属性 的绑定源:

 <GroupBox Header="{Binding Header,
             RelativeSource={RelativeSource AncestorType=local:ReusableControl}}">

现在你会看到:

<StackPanel Orientation="Vertical">
    <local:ReusableControl x:Name="Config1" Header="Config 1"/>
    <local:ReusableControl x:Name="Config2" Header="Config 2"/>
    <local:ReusableControl x:Name="Config3" Header="Config 3"/>
</StackPanel>