Ela*_*ich 34 c# wpf tabs tabcontrol
什么是编程方式(即不使用此问题中的样式,但使用代码)来隐藏TabControl标题?我会很高兴看到一个片段.
Eig*_*ite 79
实际上,隐藏标签条非常简单.你只需将每个TabItems 设置Visibility为Collapsed.您仍然可以看到标签内容,...而不是标签标题本身.
Tho*_*que 43
Style s = new Style();
s.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));
tabControl.ItemContainerStyle = s;
Run Code Online (Sandbox Code Playgroud)
嗯,有几种方法可以做到这一点.
最丑陋的方法:使用VisualTreeHelper查找TabPanel(或用于托管项目的任何其他Panel),并将其Visibility属性设置为Visibility.Collapsed.为什么难看?如果你不够小心的话,很容易在这里创建一些烦人的bug或者用"无害"的样式更新来打破这种方法......
我更喜欢使用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>
Run Code Online (Sandbox Code Playgroud)
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));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
简单的XAML风格
<TabControl>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</TabControl.ItemContainerStyle>
...
</TabControl>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45569 次 |
| 最近记录: |