С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 8
1
WPF

Добавить элемент в TitleBar окна

19.08.2019, 14:37. Показов 3614. Ответов 11
Метки wpf (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Есть следующая проблема - нужно добавить свои <Button> и <Grid> в TitleBar окна, как к примеру это сделано в приложениях: музыка Grove, Mailbird, Google Chroome и paint.

Примеры:
Кликните здесь для просмотра всего текста







Вот "решение", которое я смог найти:
Кликните здесь для просмотра всего текста

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
<Window x:Class="lol.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
 
    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Setter Property="WindowChrome.WindowChrome">
                <Setter.Value>
                    <WindowChrome/>
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Window}">
                        <Button Name="btnHelp" Height="25" HorizontalAlignment="Right" Margin="0,0,120,0" VerticalAlignment="Top" Width="40" WindowChrome.IsHitTestVisibleInChrome="True">?</Button>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Style>
 
    <Grid Background="Green">
        <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Контент</TextBlock>
    </Grid>
</Window>
Как оно выглядит по мнению автора:
Название: Paint.png
Просмотров: 112

Размер: 1.7 Кб
Как оно выглядит в Visual Studio 2019:
Название: InEditor.png
Просмотров: 112

Размер: 5.5 Кб
Как оно выглядит на самом деле:
Добавить элемент в TitleBar окна



Интересующие вопросы:
  • Можно ли всё таки добавить свои элементы в TitleBar окна?
  • Если всё же так сделать нельзя и надо сделать WindowStyle="None", то как сделать максимально одинаковый TitleBar на оригинальный виндусовый?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2019, 14:37
Ответы с готовыми решениями:

Как добавить иконку в Titlebar?
Как добавить иконку в Titlebar, где отображается название приложения?

Как обрабатывать событие нажатия кнопки и закрытия окна в titlebar?
Проблема: Как обрабатывать событие нажатия кнопки и закрытия окна в titlebar окна?

Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент
Структура &quot;Информация&quot;: - носитель; - объем; - название; - автор. Удалить первый элемент с...

Перерисовка titlebar
Всем привет. Как перерисовать шапку формы? Есть у кавонить какиенибуть наработки?

11
управление сложностью
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
19.08.2019, 14:55 2
pechhenka, т.е. у вас 6 лет разработки сложных проектов, а тут вдруг затык ? Или просто реклама своих услуг ?

Добавлено через 50 секунд
Цитата Сообщение от pechhenka Посмотреть сообщение
Можно ли всё таки добавить свои элементы в TitleBar окна?
Можно, переопределив шаблон окна
Вот тут идет похожее общение: Кастомное окно, WindowChrome
1
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 8
19.08.2019, 16:32  [ТС] 3
Нет это не реклама своих услуг (было бы что предлагать ), это реально мой затык.

Насчёт предложенного решения:
Я уже находил эти решения и у них вся проблема, что кнопки отличаются от оригинальных виндусовых кнопок свернуть/развернуть/закрыть.
Кнопки в предложенном обсуждении:
Добавить элемент в TitleBar окна

Кнопки у нормальных приложений:
Название: winbtn.png
Просмотров: 111

Размер: 3.1 Кб
0
Модератор
Эксперт .NET
15865 / 11012 / 2855
Регистрация: 21.04.2018
Сообщений: 32,349
Записей в блоге: 2
19.08.2019, 18:05 4
Цитата Сообщение от pechhenka Посмотреть сообщение
Кнопки в предложенном обсуждении
......
Кнопки у нормальных приложений
pechhenka, честно говоря совсем не понял что вам надобно.
Посмотрел скрины...

И чем они отличаются то?
Словесно прокомментируйте скрины - а то так не понять.

И первый пост - тоже подробнее опишите что вам нужно, чем не устраивают решения в темах по ссылкам что дал Почтальон.
1
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 8
19.08.2019, 19:07  [ТС] 5
Да я уже решил проблему. Буду использовать UWP вместо WPF
0
управление сложностью
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.08.2019, 08:22 6
Цитата Сообщение от pechhenka Посмотреть сообщение
Буду использовать UWP вместо WPF
Менять технологию из-за отображения кнопочек?
3
Модератор
Эксперт .NET
15865 / 11012 / 2855
Регистрация: 21.04.2018
Сообщений: 32,349
Записей в блоге: 2
20.08.2019, 10:17 7
Цитата Сообщение от pechhenka Посмотреть сообщение
Буду использовать UWP вместо WPF
UWP сложнее.
Там даже шаблоны дефолтных элементов отличаются от WPF.
Если нет настоятельной необходимости реализации многоплатформенного приложения - не советую переходить.
0
0 / 0 / 0
Регистрация: 19.08.2019
Сообщений: 8
20.08.2019, 13:07  [ТС] 8
Переход даже не ради кнопочек, а ради возможности добавить свои элементы в TitleBar, поскольку для меня это критично важно. Ведь я хочу сделать очень привлекательное приложение.
0
Модератор
Эксперт .NET
15865 / 11012 / 2855
Регистрация: 21.04.2018
Сообщений: 32,349
Записей в блоге: 2
20.08.2019, 13:57 9
Цитата Сообщение от pechhenka Посмотреть сообщение
Переход даже не ради кнопочек, а ради возможности добавить свои элементы в TitleBar, поскольку для меня это критично важно. Ведь я хочу сделать очень привлекательное приложение.
Если только ради этого - не стоит.
Даже если вам не хватает настроек из WindowChrome, вам ни что не мешает полностью убрать TitleBar из окна и эмулировать свой из WPF элементов.
0
Заблокирован
21.08.2019, 14:27 10
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от pechhenka Посмотреть сообщение
Переход даже не ради кнопочек, а ради возможности добавить свои элементы в TitleBar, поскольку для меня это критично важно. Ведь я хочу сделать очень привлекательное приложение.
В теме, на которую выше дали ссылку, есть линк на хабр, где есть пример приложения с исходниками по реализации того, что вам надо и с использованием WindowChrome и без него. Лично у меня получилось применить оба варианта в своём проекте, вариант с WindowChrome немного легче и проще в плане реализации... хотя, по большому счёту, какая разница, если весь необходимый функционал уже реализован в тех исходниках - бери да используй.

Добавлено через 10 минут
Цитата Сообщение от pechhenka Посмотреть сообщение
кнопок свернуть/развернуть/закрыть
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Button Width="45" Height="31" WindowChrome.IsHitTestVisibleInChrome="True">
    <Grid MaxHeight="10" MaxWidth="10">
        <Path Stroke="White" StrokeThickness="1" Stretch="None" RenderOptions.EdgeMode="Aliased" Data="M0,6 H10" />
    </Grid>
</Button>
<Button Width="45" Height="31" WindowChrome.IsHitTestVisibleInChrome="True">
    <Grid MaxHeight="11" MaxWidth="11">
        <Path x:Name="PART_MaxButton_Path" Stroke="White" StrokeThickness="1" Stretch="None" RenderOptions.EdgeMode="Aliased" Data="M1,1 H10 V10 H1 V1 H10" />
    </Grid>
</Button>
<Button Width="45" Height="31" WindowChrome.IsHitTestVisibleInChrome="True">
    <Grid MaxHeight="10" MaxWidth="10">
        <Path Stroke="White" StrokeThickness="1.5" Stretch="None" Data="M0,0 L10,10 M0,10 L10,0" />
    </Grid>
</Button>
2
13 / 11 / 5
Регистрация: 14.09.2018
Сообщений: 88
23.08.2019, 11:50 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
UWP сложнее
И глючнее из-за наличия кучи версий, одну переключаешь на другую и у тебя ломается, например, InteractionTracker.
Обновляешься со старой версии на новую и у тебя перестаёт собираться проект из-за x:Bind в DataTemplate внутри ListView, который вложен в другой ListView. В UWP есть свои плюсы, но и минусов хватает. Например часто бывают в Release ошибки, которые не говорят ни о чём, просто какой-то адрес и попробуй догадайся в чём ошибка.

Добавлено через 28 секунд
Цитата Сообщение от Почтальон Посмотреть сообщение
Менять технологию из-за отображения кнопочек?
Была бы моя воля, я бы вообще с UWP не связывался и писал бы под WPF, но пришлось.

Добавлено через 1 минуту
Вот у меня сейчас в проекте проблема, в Debug всё работает, в Release строится, но при запуске падает с ошибкой
| Необработанное исключение по адресу 0x00007FF800F445E5 (Windows.UI.Xaml.dll) в some.app.exe:
| 0xC000027B: Возникло внутренне исключение приложения (параметры: 0x0000017929F9E550, 0x0000000000000002)., произошло
Я уже начал дизасемблированный код дебажить, но пока не нашёл в чём причина.

Добавлено через 2 минуты
Цитата Сообщение от pechhenka Посмотреть сообщение
Да я уже решил проблему. Буду использовать UWP вместо WPF
Это ещё и установка приложений из стора и ниоткуда больше. Захочешь монетизацию, то политика МС такая, что ты должен продавать через их магазин, но за доллары (санкции или их косвенное влияние? думаю, да.). Твоё приложение никогда не попадёт в топ стора, если ты забьёшь на их рекомендации продавать за баксы через стор, а будешь, например, продавать через свои платёжные сервисы.
1
Модератор
Эксперт .NET
15865 / 11012 / 2855
Регистрация: 21.04.2018
Сообщений: 32,349
Записей в блоге: 2
23.08.2019, 12:34 12
Цитата Сообщение от QwertyJacksonX Посмотреть сообщение
И глючнее
Полностью согласен!
1
23.08.2019, 12:34
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2019, 12:34
Помогаю со студенческими работами здесь

Отключение TitleBar-а
Как отключить title bar в qt?

Невозможно добавить строки в элемент управления DataGridView, в котором нет столбцов. Сначала необходимо добавить столбцы
Дан массив студентов ВУЗа: ФИО, возраст, регион, факультет. Вывести на экран результирующую...

Вкладки в TitleBar приложения
Здравствуйте. Суть проблемы состоит в том, чтобы добавить кнопки в не пользовательскую область...

Создать список, ввести элемент и добавить этот элемент в начало списка
создать список,ввести элемент и добавить этот элемент в начало списка


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru