ОК, из ваших комментариев я понимаю, что вы хотите, чтобы каждый контекст имел свой собственный файл XAML, но чтобы он ссылался на какой-то общий шаблон.Вы можете сделать это следующим образом:
Установите общий шаблон, например, в CommonControl.xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Row="0" Grid.Column="0" Fill="Yellow" />
<TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="15" Text="This is some fixed text"/>
<ComboBox Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<StackPanel Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox>My first checkbox</CheckBox>
<CheckBox>My second checkbox</CheckBox>
</StackPanel>
<ContentControl Grid.Row="1" Grid.Column="1" Content="{Binding Path=SpecificPart1, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
<Ellipse Grid.Row="1" Grid.Column="2" Fill="Blue"/>
</Grid>
Это имеет различные элементы пользовательского интерфейса, образующие общий пользовательский интерфейс во всех позициях сетки,за исключением строки сетки 1, столбца 1 (нижняя центральная панель), где будет отображаться специфичный для контекста пользовательский интерфейс.
Теперь в коде CommonControl.xaml.cs вы создали объект зависимости, чтобы разрешитьспецифичный для контекста пользовательский интерфейс, который будет введен в шаблон:
public object SpecificPart1
{
get { return this.GetValue(SpecificPart1Property); }
set { this.SetValue(SpecificPart1Property, value); }
}
public static readonly DependencyProperty SpecificPart1Property = DependencyProperty.Register(
"SpecificPart1", typeof(object), typeof(CommonControl), new PropertyMetadata(false));
Если есть несколько позиций, в которые вы хотите поместить контекстный пользовательский интерфейс, вы можете добавить другое свойство зависимости здесь для другой части.
Затем вы можете настроить столько XAML-файлов, сколько захотите, и все они ссылаются на это и вставляют свой собственный элемент пользовательского интерфейса, чтобы переходить в изменяющуюся часть.Вот один пример, который помещает некоторый зеленый курсив туда.В MySpecificControl.xaml:
<my:CommonControl>
<my:CommonControl.SpecificPart1>
<TextBlock Foreground="DarkGreen" FontStyle="Italic" FontSize="14">This is my context specific UI</TextBlock>
</my:CommonControl.SpecificPart1>
</my:CommonControl>