Member 14711897 Ответов: 1

Как добавить вкладку ленты в пользовательских элементов управления WPF с детьми


Я новичок в WPF и хотел бы создать многоразовую ленту базового меню (System.Окна.Управления.Лента). Моя цель-создать базовую структуру меню ленты (Ribbon.QuickAccessToolBar + Лента.ApplicationMenu), который является общим для всех приложений. Но я хотел бы иметь другой дочерний элемент usercontrol, который добавляет различные элементы в базовое меню (es RibbonTab + RibbonButton и т. д.). В другом посте предложите мне использовать ResourceDictionary по назначению. Поэтому я стараюсь использовать ResourceDictionary. Если я тестирую метод с помощью простых кнопок управления, он работает так, как я ожидаю.
Но если вместо этого использовать класс Button, я использую класс RibbonTab, у меня не будет такого же результата.

Может ли что-нибудь помочь мне? Большое спасибо.

Что я уже пробовал:

Я уже пробовал с Баттоном:

Dictionary3.язык XAML
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:TestUserControl"
                    xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon">

     <Style TargetType="{x:Type local:TestBaseControl}">
            <Setter Property="Template">
               <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:TestBaseControl}">
                        <StackPanel>
                            <Button>Btn1</Button>
                            <ContentPresenter/>
                        </StackPanel>
                    </ControlTemplate>
            </Setter.Value>
            </Setter>
        </Style>
</ResourceDictionary>


UserControlChild2.язык XAML

<local:TestBaseControl x:Class="TestUserControl.UserControlChild2"
             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" 
             xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon"
             xmlns:local="clr-namespace:TestUserControl"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800"> 

    <local:TestBaseControl.Resources>
        <ResourceDictionary Source = "ResourceDictionaries/Dictionary3.xaml" />
    </local:TestBaseControl.Resources>

    <StackPanel>
        <Button>Btn2</Button>
    </StackPanel>  
</local:TestBaseControl>


И работает правильно. Но я стараюсь с RibbonTab:

Dictionary3.язык XAML:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:TestUserControl"
                    xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon">

   
    <Style TargetType="{x:Type local:TestBaseControl}">

            <Setter Property="Template">

                <Setter.Value>

                    <ControlTemplate TargetType="{x:Type local:TestBaseControl}">
                        <StackPanel>
                        <ribbon:Ribbon>
                            <ribbon:RibbonTab Header="Home1"></ribbon:RibbonTab>
                            <ContentPresenter/>
                        </ribbon:Ribbon>
                    </StackPanel>
                    </ControlTemplate>
            </Setter.Value>
            </Setter>
        </Style>
</ResourceDictionary>





UserControlChild2.язык XAML
<local:TestBaseControl x:Class="TestUserControl.UserControlChild2"
             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" 
             xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon"
             xmlns:local="clr-namespace:TestUserControl"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    
    <local:TestBaseControl.Resources>
        <ResourceDictionary Source = "ResourceDictionaries/Dictionary3.xaml" />
    </local:TestBaseControl.Resources>

    <StackPanel>
        <ribbon:RibbonTab Header="Home2"></ribbon:RibbonTab>
    </StackPanel>
   
</local:TestBaseControl>


Не работает правильно.

1 Ответов

Рейтинг:
2

Gerry Schmitz

В вашем первом примере была кнопка "в шаблоне", во втором-нет. Вы не сравниваете одно и то же.


Member 14711897

Да. Я знаю. Моя цель-работать с вкладкой ленты. Я не знаю, как это сделать с RibbonTab.
Как я могу это сделать?