C# 如何隐藏主/默认选项卡(TabControl)上的关闭按钮
我有一个C# 如何隐藏主/默认选项卡(TabControl)上的关闭按钮,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个选项卡控件,每个选项卡中都有一个关闭按钮。我想在第一个(默认)选项卡中隐藏关闭按钮。我使用了WPF MVVVM。我的用户界面 这是TabControl的XAML代码: <UserControl x:Class="Money_Transfer_System.Views.TabControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
选项卡控件
,每个选项卡中都有一个关闭按钮。我想在第一个(默认)选项卡中隐藏关闭按钮。我使用了WPF MVVVM。我的用户界面
这是TabControl
的XAML代码:
<UserControl x:Class="Money_Transfer_System.Views.TabControl"
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:Money_Transfer_System.Views"
xmlns:ViewModels="clr-namespace:Money_Transfer_System.ViewModels"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.DataContext>
<ViewModels:MainViewModel/>
</UserControl.DataContext>
<Grid>
<TabControl Name="mytabcontrol" SelectionChanged="mytabcontrol_SelectionChanged"
ItemsSource="{Binding Tabs}" Margin="10,0" SelectedItem="{Binding TabSelected}" >
<TabControl.ItemTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal" Name="st">
<TextBlock Text="{Binding Header}" Padding="10" />
<Button
Name="closeButton"
Content="X" Cursor="Hand" DockPanel.Dock="Right" Focusable="False"
FontFamily="Courier" FontSize="9" FontWeight="Bold" Margin="0,1,0,0"
Width="16" Height="16" Padding="0"
Command="{Binding DataContext.RemoveTab,
RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding}" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<!--this is the body of the TabItem template-->
<DataTemplate>
<ContentControl Content="{Binding Content}"></ContentControl>
<!--<TextBlock
Text="{Binding Content}" />-->
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</UserControl>
我使用了Visibility转换器,但它不起作用,我希望有人能帮助我。将此添加到SelectionChanged eventhandler中,以在代码中隐藏按钮:
if (tabControl.SelectedIndex == 0)
closeButton.Visibility = Visibility.Hidden;
else
closeButton.Visibility = Visibility.Visible;
您可以将
bool
属性CanClose
添加到TabItem
类中
public class TabItem
{
public bool CanClose { get; set; }
// ...other properties.
}
然后将一个BooleanToVisibilityConverter的实例添加到选项卡控件的资源中
<TabControl Name="mytabcontrol"
SelectionChanged="mytabcontrol_SelectionChanged"
ItemsSource="{Binding Tabs}"
Margin="10,0"
SelectedItem="{Binding TabSelected}">
<TabControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</TabControl.Resources>
<!-- ...other code. -->
</TabControl>
最后,为添加的选项卡将CanClose
属性设置为true
。默认情况下,在MainViewModel
的构造函数中,“主页”选项卡将获得false
private void AddTabItem()
{
var header = "Tab " + tabs;
var content = "Content " + tabs;
var item = new TabItem { Content = content, Header = header, CanClose = true };
Tabs.Add(item);
tabs++;
}
作为注释,考虑在<代码> TabIt/<代码>模型中执行<代码> IntIfyPrimyType ,否则对属性的更改将不会在UI中反映。
非常感谢。它是工作的,我很感激您。请您解释一下如何实现(IntIfyPrimTyTrand)。在TabItem中反映了UI中的更改。感谢您的回复,但是这种方式不起作用,因为我无法从后面的代码中找到关闭按钮的名称,下面的帖子解决了这个问题
<Button Name="closeButton"
Visibility="{Binding CanClose, Converter={StaticResource BooleanToVisibilityConverter}}"
.../>
private void AddTabItem()
{
var header = "Tab " + tabs;
var content = "Content " + tabs;
var item = new TabItem { Content = content, Header = header, CanClose = true };
Tabs.Add(item);
tabs++;
}