Наше приложение несколько сходно построено для общих веб -браузеров, что означает, что различные элементы управления пользователем сгруппированы на вкладки, которые могут быть созданы, переключается между и закрытым. Для этого мы создали пользовательский элемент ClosableTab TabControl . это обычно работает довольно хорошо, но так часто выбор вкладки озадачивает зажигание. на какую -то конкретную вкладку, казалось бы, выбранную случайным образом. она всегда прыгает на эту же вкладку, пока пользователь не создаст новую вкладку и не удалит ее (каким -то образом сбросить процесс выбора?!). Strong> Context:
Мы имеем дело с этим вопросом для значительной части 3+ лет, не способных его решить. Приложение записано в WPF и C# в настоящее время таргетинг .NET Framework 4.7.2. Мы действительно не следуем шаблону программирования MVVM, хотя мы стараемся разделять логику /конструкции /пользовательский интерфейс Bussines Logic /Data.
Основной TabControl находится по адресу mainwindow.xaml :
Код: Выделить всё
[code]public void AddItem(Item page)
{
if (!page.ErrorClose)
{
tcMain.Items.Insert(tcMain.Items.Count - 1, page.TabPage);
tcMain.SelectedItem = page.TabPage;
page.SetLanguage();
}
}
public TabItem GetActual()
{
return tcMain.SelectedItem as TabItem;
}
public void SetActual(TabItem item)
{
tcMain.SelectedItem = item;
}
private void tcMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//ak je len jedna zalozka, nerob nic
if (tcMain.Items.Count
public class ClosableTab : TabItem
{
// Constructor
public ClosableTab()
{
// Create an instance of the usercontrol
CloseableHeader closableTabHeader = new CloseableHeader();
// Assign the usercontrol to the tab header
this.Header = closableTabHeader;
// Attach to the CloseableHeader events
// (Mouse Enter/Leave, Button Click, and Label resize)
closableTabHeader.button_close.MouseEnter +=
new MouseEventHandler(button_close_MouseEnter);
closableTabHeader.button_close.MouseLeave +=
new MouseEventHandler(button_close_MouseLeave);
closableTabHeader.button_close.Click +=
new RoutedEventHandler(button_close_Click);
}
// Property - Set the Title of the Tab
// Override OnSelected - Show the Close Button
// Override OnUnSelected - Hide the Close Button
// Override OnMouseEnter - Show the Close Button
// Override OnMouseLeave - Hide the Close Button (If it is NOT selected)
// Button MouseEnter - When the mouse is over the button - change color to Red
// Button MouseLeave - When mouse is no longer over button - change color back to black
// Button Close Click - Remove the Tab - (or raise an event indicating a "CloseTab" event has occurred)
private void cm_Connect_Click(object sender, RoutedEventArgs e)
{
MainWindow.AppWindow.AddItem(new Search());
}
/// \
/// Interaction logic for Search.xaml
/// \
public partial class Search
{
public ObservableCollection\ AvailablePorts { get; set; }
public Search()
{
InitializeComponent();
//daj ze mozem otvorit
ErrorClose = false;
//nastav priradenie
AvailablePorts = new ObservableCollection();
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 5);
Run = true;
dispatcherTimer.Start();
dispatcherTimer_Tick(null, null);
Image = ToolFuncs.GetIcon("IcoConnect");
comboBox_ConnectionType.SelectedIndex = 0;
comboBox_Port.ItemsSource = AvailablePorts;
}
...
< /code>
Есть ли у вас есть идеи, что может вызвать это. Мы уже пытались проверить, не поднимается ли какое -то событие в цепочке пользовательского интерфейса, чтобы насильно установить SelectedItem и так далее, но не повезло.
Подробнее здесь: https://stackoverflow.com/questions/793 ... tabcontrol
Мобильная версия