Я пытаюсь создать приложение WPF, у меня есть пустое окно, в котором есть только рамка для переключения между страницами, у меня есть заголовок TabControl, который должен быть одинаковым на всех страницах, логический подход состоит в том, чтобы поместить TabControl внутри окна, но когда я это сделал, это на самом деле не работает, хотя я пытался разместить во втором ряду сетки окна, а в первом ряду, конечно, есть TabControl, в любом случае подход, которому я следовал, заключался в добавлении компонента TabControl к каждому страница, но когда я добавил логику в С# позади, чтобы изменить источник кадра в окне, я добавил ее только на домашнюю страницу, она работала нормально, но странно то, что она работает и на всех других страницах. Я пробовал проверить, сохраняется ли один и тот же Home TabControl на других страницах, но это не так. Например, когда я удаляю его со страницы клиента, он не отображается после перехода на страницу клиента, что предполагает, что все ContentControl, добавляющие TabControl на страницы, просто ссылаются на компонент TabControl в app.xaml, а не создают его экземпляры внутри каждой страницы.
вот код C# позади дома страница
public partial class Home : Page
{
public Home()
{
InitializeComponent();
((TabControl)header.Content).SelectionChanged += TabListener.OnTabSelectionChanged;
}
}
а вот код C# MainWindow
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public void Navigation(string tab)
{
frame.Source = new Uri($"{tab}.xaml", UriKind.Relative);
}
}
также код класса TabListener, который фактически выполняет всю работу (вызывается из инициализатора домашней страницы)
public static class TabListener
{
public static void OnTabSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (sender is TabControl tabControl)
{
//var selectedTab = tabControl.SelectedItem;
if (tabControl.SelectedItem is TabItem tabItem)
{
string pageName = tabItem.Header.ToString();
if (pageName != null)
{
if (Application.Current.MainWindow is MainWindow mainWindow)
{
mainWindow.Navigation(pageName);
}
}
}
}
}
}
Так я прав? ContentControl просто относится к одному и тому же компоненту? Любая информация о том, как это работает, поможет. Спасибо
РЕДАКТИРОВАТЬ:
Вот коды xaml для домашней страницы и главного окна, они должны все прояснить
xmlns="http://schemas.microsoft.com/winfx/2006 ... esentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/marku ... ility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="Home">
Scotland's Charity
Find your next job with few steps, we help you get up again and rebuild your lifeFind more about us by visiting our website
а вот код xaml для MainWindow:
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-instance
Создает ли ContentControl ссылку на компонент вместо экземпляра? ⇐ C#
Место общения программистов C#
-
Anonymous
1761404519
Anonymous
Я пытаюсь создать приложение WPF, у меня есть пустое окно, в котором есть только рамка для переключения между страницами, у меня есть заголовок TabControl, который должен быть одинаковым на всех страницах, логический подход состоит в том, чтобы поместить TabControl внутри окна, но когда я это сделал, это на самом деле не работает, хотя я пытался разместить во втором ряду сетки окна, а в первом ряду, конечно, есть TabControl, в любом случае подход, которому я следовал, заключался в добавлении компонента TabControl к каждому страница, но когда я добавил логику в С# позади, чтобы изменить источник кадра в окне, я добавил ее только на домашнюю страницу, она работала нормально, но странно то, что она работает и на всех других страницах. Я пробовал проверить, сохраняется ли один и тот же Home TabControl на других страницах, но это не так. Например, когда я удаляю его со страницы клиента, он не отображается после перехода на страницу клиента, что предполагает, что все ContentControl, добавляющие TabControl на страницы, просто ссылаются на компонент TabControl в app.xaml, а не создают его экземпляры внутри каждой страницы.
вот код C# позади дома страница
public partial class Home : Page
{
public Home()
{
InitializeComponent();
((TabControl)header.Content).SelectionChanged += TabListener.OnTabSelectionChanged;
}
}
а вот код C# MainWindow
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public void Navigation(string tab)
{
frame.Source = new Uri($"{tab}.xaml", UriKind.Relative);
}
}
также код класса TabListener, который фактически выполняет всю работу (вызывается из инициализатора домашней страницы)
public static class TabListener
{
public static void OnTabSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (sender is TabControl tabControl)
{
//var selectedTab = tabControl.SelectedItem;
if (tabControl.SelectedItem is TabItem tabItem)
{
string pageName = tabItem.Header.ToString();
if (pageName != null)
{
if (Application.Current.MainWindow is MainWindow mainWindow)
{
mainWindow.Navigation(pageName);
}
}
}
}
}
}
Так я прав? ContentControl просто относится к одному и тому же компоненту? Любая информация о том, как это работает, поможет. Спасибо
РЕДАКТИРОВАТЬ:
Вот коды xaml для домашней страницы и главного окна, они должны все прояснить
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:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="Home">
Scotland's Charity
Find your next job with few steps, we help you get up again and rebuild your lifeFind more about us by visiting our website
а вот код xaml для MainWindow:
Подробнее здесь: [url]https://stackoverflow.com/questions/79799533/does-contentcontrol-create-a-reference-to-the-component-instead-of-an-instance[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия