什麼是編程方式(即不使用樣式,如this question,但使用代碼)來隱藏TabControl
標頭?我會很高興爲一個片段。隱藏TabControl標頭
回答
Style s = new Style();
s.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));
tabControl.ItemContainerStyle = s;
那麼,有幾種方法可以做到這一點。
最醜陋的方法:使用VisualTreeHelper查找TabPanel(或任何其他用於託管物品的面板),並將它的Visibility屬性設置爲Visibility.Collapsed。爲什麼醜陋?在這裏創建一些煩人的錯誤很容易,或者如果你不夠細心,打破這種方法'無害'風格更新...
我更喜歡使用Xaml和代碼的組合。您綁定TabItem的可見性以查看模型屬性或TabPanel的可見性以查看模型屬性。在這兩種情況下,您都必須重寫樣式(ItemContainer的樣式或整個TabControl的樣式)。在這兩種情況下,您都有查看模型。現在,要切換選項卡標題的可見性,只需更新視圖模型中的屬性即可。這裏是一個的TabItems例如:
XAML
<Window x:Class="WpfApplication5.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication5"
Title="Tab Settings"
Height="300"
Width="300">
<Window.Resources>
<local:TabControlViewModel x:Key="tabVM" />
<BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
</Window.Resources>
<Grid>
<TabControl DataContext="{StaticResource tabVM}">
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Visibility"
Value="{Binding TabHeaderVisible, Converter={StaticResource booleanToVisibilityConverter}}" />
</Style>
</TabControl.ItemContainerStyle>
<TabItem Header="Tab 1">
<StackPanel>
<TextBlock Text="Content" />
<Button Content="Toggle Header"
Click="ToggleHeaderClick" />
</StackPanel>
</TabItem>
<TabItem Header="Tab 2 Header">
<TextBlock Text="Tab 2 Content" />
</TabItem>
</TabControl>
</Grid>
</Window>
C#
using System.ComponentModel;
using System.Windows;
using System.Windows.Input;
namespace WpfApplication5
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void ToggleHeaderClick(object sender, RoutedEventArgs e)
{
var tabControlVM =
((FrameworkElement)sender).DataContext as TabControlViewModel;
if (tabControlVM != null)
{
tabControlVM.TabHeaderVisible = !tabControlVM.TabHeaderVisible;
}
}
}
public class TabControlViewModel : INotifyPropertyChanged
{
private bool _tabHeaderVisible = true;
public ICommand ToggleHeader
{
get; private set;
}
public bool TabHeaderVisible
{
get { return _tabHeaderVisible; }
set
{
_tabHeaderVisible = value;
OnPropertyChanged("TabHeaderVisible");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
var changed = PropertyChanged;
if (changed != null)
{
changed(this, new PropertyChangedEventArgs(name));
}
}
}
}
其實,這是非常簡單的隱藏選項卡條。您只需將每個TabItem
的Visibility
設置爲Collapsed
即可。您仍然可以看到標籤內容,......只是不是標籤標題本身。
這對我的項目非常有用。 – jlafay 2011-01-19 16:43:32
我也是,你知道它爲什麼有這種行爲嗎?我們期待標籤容器完全消失。 – Purplegoldfish 2013-03-12 15:25:58
這也適用於我 - 謝謝。我還最終創建了一個BooleanToVisibilityCollapsedConverter,以便將此屬性數據綁定到我的視圖模型。 – 2013-07-21 22:09:42
C#
private void TabItemControl_MouseEnter(object sender, MouseEventArgs e) { if (this.TabItemControl.IsSelected == false) { this.TabItemControl.Opacity = 100; }}
private void TabItemControl_MouseLeave(object sender, MouseEventArgs e) { if (this.TabItemControl.IsSelected == false) { this.TabItemControl.Opacity = 0; }}
private void TabAllControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (this.TabItemControl.IsSelected == false) { this.TabItemControl.Opacity = 0; }}
請給出一些背景,爲什麼這是答案 – JonE 2015-04-14 08:14:18
簡單XAML風格
<TabControl>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</TabControl.ItemContainerStyle>
...
</TabControl>
我在一些代碼,我手動填充選項卡項目嘗試這樣做...
tabItemToAdd.Visibility = Visibility.Collapsed;
。但是當我第二次清除標籤時,我發生了一件奇怪的事情控件的項目,再次創建選項卡項目並使用此方法,然後將其添加到選項卡控件,整個選項卡項目及其內容都消失了,而不僅僅是選項卡標題。所以,我已經受夠了的this solution的方案相當於成功:
tabItemToAdd.Template = new ControlTemplate();
- 1. WinForms隱藏TabControl標題
- 2. 隱藏NSTableView標頭?
- 3. 隱藏WPF中的Tab標題TabControl
- 4. WPF4在DockPanel中的TabControl/Grid隱藏StatusBar
- 5. 隱藏WPF TabControl中的選定TabItems
- 6. WinForm TabControl:如何動態地隱藏/顯示選項卡標題?
- 7. 點擊隱藏標頭下拉
- 8. 插入後,JTable隱藏了標頭
- 9. 當section0中的numberOfRows隱藏tableview標頭
- 10. 使用https將標頭中的密碼隱藏到標頭
- 11. 表頭不隱藏
- 12. TabControl與可關閉TabItem標頭
- 13. 隱藏光標
- 14. 隱藏標籤
- 15. 隱藏標籤
- 16. Xcode現場碼頭隱藏
- 17. JavaFX的:隱藏COMBOX箭頭
- 18. @synthesize隱藏文件頭?
- 19. 隱藏標記 - Mapbox
- 20. 隱藏軸標籤
- 21. 隱藏在標籤
- 22. NSSecureTextField隱藏光標
- 23. 隱藏ArcGis標記
- 24. 隱藏標題欄
- 25. 隱藏標籤頁
- 26. javascript隱藏/取消隱藏,但想要一個箭頭指向/隱藏/取消隱藏
- 27. 如何有條件地隱藏TabControl的TabPanel部分的整體?
- 28. WPF TabControl當更改選定項MediaUriElement隱藏
- 29. 在按鈕的clickevent創建一個TabControl FOM代碼隱藏
- 30. 在Winform應用程序中從TabControl隱藏TabPage
哇。我期待像'tab.Header.Visible = false'這樣的行不會導致怪物背後的巨大XML +代碼! – 2009-09-23 16:37:54
這顯示了在MVVM設計模式中完成此操作的適當方法。雖然這不是問題的要求,但對於那些在整個代碼中強制執行模式的人來說仍然有幫助。 – Charlie 2013-08-27 20:21:56
如果你是strutscly MVVM很有用,但是在一些必須使用數據庫生成的東西(如POS)的項目中,這是不現實的,特別是因爲沒有XAML。然而,像這樣的項目的任何提示,以保持代碼更清潔? – ThrowingDwarf 2016-05-09 08:45:30