首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >项目来源列表为空时如何隐藏页签控件

项目来源列表为空时如何隐藏页签控件
EN

Stack Overflow用户
提问于 2019-12-08 16:40:15
回答 3查看 358关注 0票数 1

我有一个WPF .NET核心应用程序,其TabControl绑定到TabItems的ObservableCollection。我希望在ObservableCollection为空时隐藏TabControl,并希望在其位置显示另一个面板。然后,当项目被添加回ObservableCollection时,我希望隐藏备用面板并重新启动TabControl。希望在XAML中使用尽可能少的代码隐藏,我将如何实现这一点呢?我知道我可以在代码隐藏中做到这点。

下面是应用程序的关键部分。我已经隐藏了TabControl,并包含了一个边框控件来表示当TabControl被隐藏时我将显示的面板。

代码语言:javascript
运行
复制
    <Window x:Class="TabTest.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:TabTest"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Grid>
            <Border Name="emptyTabPanel" Grid.Row="1" BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" 
                                BorderThickness="1,1,1,1" Margin="5,0,5,5" Visibility="Hidden">
            </Border>
            <TabControl Name="MainTabControl" Visibility="Visible">
                <TabControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Label Content="{Binding Header}" MinWidth="60"/>
                            <Button BorderThickness="0" Background="Transparent" Height="16" Width="15" Margin="15,2,0,0">
                                <Image Source="images/close.png" Height="8"/>
                            </Button>
                        </StackPanel>
                    </DataTemplate>
                </TabControl.ItemTemplate>
            </TabControl>
        </Grid>
    </Window>
代码语言:javascript
运行
复制
using System.Windows;
using System.Collections.ObjectModel;

namespace TabTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private ObservableCollection<TabEntry> tabEntries;

        public MainWindow()
        {
            InitializeComponent();

            tabEntries = new ObservableCollection<TabEntry>();
            MainTabControl.ItemsSource = tabEntries;

            for (int i = 1; i <= 5; i++)
            {
                tabEntries.Add(new TabEntry { Header = "tab " + i });
            }
        }
    }

    public class TabEntry
    {
        public string Header { get; set; }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-08 18:20:57

所有ItemsControls都提供了可在触发器中使用的HasItems属性。与ItemsSource.Count上的DataTrigger相比,当根本不设置ItemsSource时,也可以这样做。

代码语言:javascript
运行
复制
<TabControl ...>
    <TabControl.Style>
        <Style TargetType="TabControl">
            <Style.Triggers>
                <Trigger Property="HasItems" Value="False">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TabControl.Style>
    ...
</TabControl>
票数 3
EN

Stack Overflow用户

发布于 2019-12-08 18:09:31

您可以使用样式中的DataTriger来完成此操作。请注意,您需要删除Visibility="Visible",否则设置程序将无法更改它。

代码语言:javascript
运行
复制
    <TabControl Name="MainTabControl" Background="Red">
        <TabControl.Style>
            <Style TargetType="TabControl">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ItemsSource.Count, RelativeSource={RelativeSource Self}}" Value="0">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TabControl.Style>
        <TabControl.ItemTemplate>
            <!-- and so on -->
票数 1
EN

Stack Overflow用户

发布于 2019-12-08 16:47:00

为此,您需要一个适当的视图模型,而不是将选项卡直接绑定到集合。该视图模型将包含一个HasItems属性,您将把TabControl可见性绑定到该属性,以及一个反向属性--比如IsEmpty,您将把面板的可见性绑定到该属性。

绑定ObservableCollectionevents来监听项目计数的变化,并为视图模型适当地引发PropertyChanged事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59233760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档