WPF TabControl Unload俩次的解决方案

WPF中,有些控件会多次触发Unload,有点莫名其妙~

Unload的多次触发

TabControl的内容,我是这么设置的:

在TabItem的CacheSettingView中,监听Loaded/Unloaded事件。

  1. 当窗口加载时,触发一次Loaded
  2. 不选中TabItem,并关闭窗口,触发一次Unloaded
  3. 但是,如果选中相应的Tab并显示了CacheSettingView内容后,再关闭窗口,会触发俩次Unloaded

原因:俩次Unloaded,分别是由TabControl和TabItem触发的。

值得注意的是,切换Tab也会造成TabItem内控件Loaded和Unload事件的频繁调用

触发多次Unload的详细情况,可以参考同事大佬的博客《Why Unload Twice

Unload多次触发的解决方案

如何解决?你可以放弃TabControl,添加ListBox重写样式模板,也可以按照如下方案修改:

右侧的控件内容是否显示,直接绑定TabItem的选中状态。方案很简单,只是为了mark一下,以后自己方便查询~

当然,你也可以将TabItem改为RadioButton等

原文地址:https://www.cnblogs.com/kybs0/p/9356305.html

时间: 2024-12-29 07:08:37

WPF TabControl Unload俩次的解决方案的相关文章

WPF TabControl 模拟动画

1 public class MyTabControl : TabControl 2 { 3 4 Timer t = null; 5 protected override void OnSelectionChanged(SelectionChangedEventArgs e) 6 { 7 Action a = () => 8 { 9 try 10 { 11 var control = e.Source as MyTabControl; 12 if (control == null) return

WPF TabControl SelectionChanged 重复执行的问题

很邪门的问题,我曾经都感觉是微软的bug了. 问题是这样的:在我的tabcontrol下的tabitem中有一个combobox控件,由于一些原因,需要执行tabcontrol的SelectionChanged 事件,但是比较奇怪的时候,每当我在combobox选择一项时,即combobox的SelectionChanged 事件改变的时候,tabcontrol的SelectionChanged 事件同时也执行了,百思不得其解,后来在网上找到了相关的原因,如下: This is because

WPF TabControl only load the selected TabItem

1.binding ItemsSource public class TabItemViewModel { public string Header { get; set; } public FrameworkElement Content { get; set; } } xmlns:sc="clr-namespace:System.Collections;assembly=mscorlib"<Window.Resources> <sc:ArrayList x:Key

WPF TabControl 隐藏标头

1. 将每个 TabItem 的 Visibility 属性设置为 Visibility.Collapsed 即可隐藏标头 <TabItem Visibility="Collapsed"> 2. 设置 TabControl 控件的 SelectedIndex 属性即可在标签页之间切换

wpf 绑定失效的原因及解决方案

有时候,您会发现在程序开始时还能正常运行的绑定失效了.就个人经验而言,绑定的失效主要分为两种情况:对于One-way绑定而言,如果软件开发人员绕过绑定直接更改了目标属性,那么绑定将会失效.而对于Two-way绑定而言,如果软件开发人员没有通过绑定直接更改了目标属性,而目标属性对源属性的更新由于抛出异常等原因失败,那么绑定也将失效. 建议解决方案,针对于Two-way的绑定,自定义一个实现了IValueConverter的类,应用到绑定的Converter属性,在Convert和ConvertBa

WPF TabControl控件-事件相关问题

TabControl控件的TabItem的Content元素,例如:DataGrid控件,在对事件的处理时,需要对事件的源引起关注,当需要处理DataGrid的事件时,事件会传递到TabControl中,解决这种问题的方法如下: 方法一:判断触发此事件的源是谁,根据事件的源再做相应处理 private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is Tab

wpf TabControl控件的用法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Med

WPF TabControl联动

TabItem的Header放入Radiobutton,TabItem的IsExpanded属性绑定Radiobutton的IsChecked属性,修改Radiobutton样式去掉Radiobutton的选择圆圈.

[WPF系列-TabControl应用]

引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介     ============================================ WpfScrollableTabControl.zip   ============================================     参考: want to make scrollable tabs for a tabcontrol How to change app