Лента WPF, основное содержание изменения, когда ribbontab выбран

Я хотел бы изменить содержание основной поверхности (материал ниже самой ленты) в приложении WPF, когда ленточная вкладка нажата. Я использую офисную ленту, не, который является вопросами очень. Таким образом, который контейнерное управление WPF я должен использовать, и как я сделал бы это? Если у меня просто есть различные средства управления со скрытой видимостью, или что. Я не эксперт WPF, таким образом, мне нужно немного вдохновения.

10
задан GEOCHET 1 December 2011 в 16:16
поделиться

1 ответ

В предисловии скажу, что сомневаюсь, что это лучший способ сделать это.

Это мой стиль для 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>

Также убедитесь, что у вас есть шаблон данных, указывающий ваш контент на представление

Надеюсь, это поможет.

11
ответ дан 3 December 2019 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: