Я хотел бы изменить содержание основной поверхности (материал ниже самой ленты) в приложении WPF, когда ленточная вкладка нажата. Я использую офисную ленту, не, который является вопросами очень. Таким образом, который контейнерное управление WPF я должен использовать, и как я сделал бы это? Если у меня просто есть различные средства управления со скрытой видимостью, или что. Я не эксперт WPF, таким образом, мне нужно немного вдохновения.
В предисловии скажу, что сомневаюсь, что это лучший способ сделать это.
Это мой стиль для RibbonTab. Обратите внимание, что IsSelected привязан к IsSelected в модели представления
<!-- RibbonTab -->
<Style TargetType="{x:Type ribbon:RibbonTab}">
<Setter Property="ContextualTabGroupHeader" Value="{Binding ContextualTabGroupHeader}" />
<Setter Property="Header" Value="{Binding Header}" />
<Setter Property="ItemsSource" Value="{Binding GroupDataCollection}" />
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
Это код модели представления
public bool IsSelected
{
get
{
return _isSelected;
}
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(new PropertyChangedEventArgs("IsSelected"));
}
}
}
private bool _isSelected;
В конструкторе для TabViewModel я беру параметр для ViewModel содержимого
public TabData(ISelectedContentTab content)
: this(content.DisplayName)
{
_selectedContent = content;
}
private ISelectedContentTab _selectedContent;
Затем Я использовал ItemsControl для отображения выбранного контента в моем xaml
<ItemsControl Grid.Row="1" VerticalContentAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{Binding ElementName=ribbon,Path=SelectedItems}"
ItemTemplate="{StaticResource ContentControlTemplate}" />
И ContentControlTemplate у меня есть
<DataTemplate x:Key="ContentControlTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" VerticalAlignment="Stretch" Height="Auto" VerticalContentAlignment="Stretch" Content="{Binding SelectedContent}" />
</Grid>
</DataTemplate>
Также убедитесь, что у вас есть шаблон данных, указывающий ваш контент на представление
Надеюсь, это поможет.