2017-05-30 93 views
0

我正在尋找一種方法來更改包含XAML的重用用戶控件上的標題。如何更改重用的UserControl上的WPF GroupBox標題

用戶控制:

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

包含窗口:

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

enter image description here

意圖是使連續的控件三次說「配置1」,「配置2」,配置3「,而不是」配置編號「。

在此先感謝您的幫助!

回答

2

在你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> 
+0

非常感謝!我不得不添加一個xmlns:本地行(到ReusableControl),然後它完美地工作。 – JulieC