powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF ToolBar ControlTemplate c кнопками и их события.
9 сообщений из 9, страница 1 из 1
WPF ToolBar ControlTemplate c кнопками и их события.
    #38895034
Fantastick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вечер добрый, господа.

Не могли Вы подсказать мне решение моей проблемы:
Есть control template на ToolBar:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<ResourceDictionary x:Class="RDToolBarMain"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    >
    <Style x:Key="MainToolBarStyle" TargetType="ToolBar" >
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="OverridesDefaultStyle" Value="False" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToolBar}" >
                    <ToolBar x:Name="toolBar" HorizontalAlignment="Stretch" VerticalAlignment="Top" >
                        <Button x:Name="btnAdd" Content="Добавить" Height="30" VerticalAlignment="Top" />
                        <Button x:Name="btnDel" Content="Удалить" Height="30" VerticalAlignment="Top" />
                        <Button x:Name="btnEdit" Content="Редактировать" Height="30" VerticalAlignment="Top" />
                    </ToolBar>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    </ResourceDictionary>



Так же есть окно, в котором этот темлейт подключается:
Соответственно мусор пропущен...
Код: xml
1.
2.
3.
<Window>
<ToolBar x:Name="toolBar" Style="{StaticResource MainToolBarStyle}" Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  />
</Window>



Так вот как мне привязать событие клик к моей кнопке btnAdd, чтобы я мог сделать его реализацию в моей форме?
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38895553
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantastick,

вы неправильно поняли, что такое шаблон, а что такое контент.
В шаблоне не должен содержаться контент, в шаблоне описывается внешний вид контрола
вот банальный пример, который был написан за пару минуток, внешний вид определяйте сами.
в шаблон ToolBar входят 2 обязательных элемента: PART_ToolBarPanel и PART_ToolBarOverflowPanel
их можно посмотреть в MSDN или в исходнике контрола.
после того, как вы описали шаблон, вы добавляете содержимое (кнопки) в свойство Content или Children (в зависимости от элемента управления) и получаете профит.
Для кнопок в WPf лучше использовать не события MouseDown и прочие, а команды и маршрутизируемые команды. Это в разы удобнее и правильнее.



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
<Window x:Class="WpfApplication11.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="MyToolBarStyle" TargetType="{x:Type ToolBar}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToolBar}">
                        <Border x:Name="ToolBarAdorner" Background="LightGray">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="Auto"/>
                                </Grid.ColumnDefinitions>
                                <ToolBarPanel x:Name="PART_ToolBarPanel" Grid.Column="0" IsItemsHost="True"/>
                                <ToolBarOverflowPanel x:Name="PART_ToolBarOverflowPanel" Grid.Column="1" Background="Aqua" Width="10"/>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <DockPanel>
        <ToolBar Style="{StaticResource MyToolBarStyle}"
                 DockPanel.Dock="Top" VerticalAlignment="Top"
                 HorizontalAlignment="Stretch">
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24"/>
            <Button Content="1" Width="24" Height="24" Background="Red"/>
        </ToolBar>
    </DockPanel>
</Window>
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38895824
Fantastick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, спасибо.
Может быть мне шире описать задачу.
Например, мне нужен ToolBar с 3 кнопками, добавить, удалить, редактировать, возможно потом понадобиться его расширить.
Есть к примеру 3 формы, где я хочу использовать такой тулбар, например сотрудники, отделы, заказы.
При нажатии на кнопку добавить я хочу открывать пустую карточку для заведения новой сущности в зависимости от моего справочника.

Как я это делал в Winforms, делал базовый класс с таким toolbar описывал виртуальные методы - добавить, удалить, редактировать, и в наследники переопределял эти методы.
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38895863
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantastick,

есть несколько путей:
а) Создаем UserControl, переопределить его в ToolBar, добавляет в ToolBar 3 кнопки
в) создать в ресурсах контрол, указать параметр x:Shared = "False" и использовать в 3 разных местах

для кнопок нужно задать маршрутизируемые команды, например, 1 команда "AddRoutedCommand", при её нажатии, из кнопки будет вызвано всплывающее событие. Всплывает око к корню визуального дерева, а значит, в окне в CommandBinding мы можем его перехватить и обработать.

Если команда не привязана к какому то контексту, а просто выполняет какое то действие над объектом, то можно просто разместить такую команду в ресурсах и задать её кнопке. Или использовать связывание с модель представления.
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38896137
Fantastick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, спасибо еще раз.

Ух, wpf зло. Простое делает сложным. Сложное простым.
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38896621
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fantastick,

это только кажется, если делать всё правильно, всё становится простым )
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38896727
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesFantastick,

это только кажется, если делать всё правильно, всё становится простым )

это только кажется что это это только кажется =).
мое скромное мнение в том что на самом деле до глупого сложная штука пытается спрятаться за простыми вещами.
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38896742
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин Сергеймое скромное мнение в том что на самом деле до глупого сложная штука пытается спрятаться за простыми вещами.
А ваше скромное мнение основывается на сколь-нибудь состоявшемся опыте работы с WPF?
...
Рейтинг: 0 / 0
WPF ToolBar ControlTemplate c кнопками и их события.
    #38896839
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныМалыхин Сергеймое скромное мнение в том что на самом деле до глупого сложная штука пытается спрятаться за простыми вещами.
А ваше скромное мнение основывается на сколь-нибудь состоявшемся опыте работы с WPF?
кстати сложнее всего приходится тем, кто переходит с WF на WPF (лично моё наблюдение, на этом форуме и на личном опыте)
так как приходится ломать себе мозг, менять парадигму, шаблоны и так далее :) но это моё имхо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF ToolBar ControlTemplate c кнопками и их события.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]