C# 带有选项卡项的用户控件没有';不显示
我有我的C# 带有选项卡项的用户控件没有';不显示,c#,wpf,user-controls,tabcontrol,tabitem,C#,Wpf,User Controls,Tabcontrol,Tabitem,我有我的UserControltable选项卡。在我的应用程序中,我有一个TabControl,我想在运行时通过一个按钮将我的table添加到我的TabControl。问题是它没有显示布局,只是显示灰色。只有在我将TabControl直接添加到我的TabItem时,它才起作用。它是否必须在运行时添加控件,或者为什么不能正确显示布局 table.xaml <UserControl x:Class="RestaurantManagmentSystemProject.TableTab"
UserControl
table选项卡。在我的应用程序中,我有一个TabControl
,我想在运行时通过一个按钮将我的table添加到我的TabControl
。问题是它没有显示布局,只是显示灰色。只有在我将TabControl
直接添加到我的TabItem
时,它才起作用。它是否必须在运行时添加控件,或者为什么不能正确显示布局
table.xaml
<UserControl x:Class="RestaurantManagmentSystemProject.TableTab"
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:RestaurantManagmentSystemProject"
Name="TableTabItem"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<TabItem Name="Tab" Header="{Binding TabItemHeader, ElementName=TableTab}">
<DockPanel>
<Grid DockPanel.Dock="Top" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0">
<DataGrid.Columns>
<DataGridTextColumn Header="Order number"/>
<DataGridTextColumn Header="Customer"/>
<DataGridTextColumn Header="Total Price"/>
<DataGridComboBoxColumn Header="Urgency"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Column="1">
<Label Content="Maximum Seats:"/>
<Label Content="Current connections:"/>
</StackPanel>
<DockPanel Grid.Column="2" LastChildFill="False" HorizontalAlignment="Right">
<Button Name="BtnEditTable" Content="Edit Table" DockPanel.Dock="Top"/>
</DockPanel>
</Grid>
<TabControl Margin="5,0,0,0">
</TabControl>
</DockPanel>
</TabItem>
在这里,我将TableTab添加到现有的TabControl
TableTab t = new TableTab();
t.TabItemHeader = "Tab1";
m.TabContTables.Items.Add(t);
编辑:
main窗口m;
表格选项卡
应该是选项卡项
,而不是用户控件
。只需更改基本类型:
public partial class TableTab : TabItem
{
public static readonly DependencyProperty TableIdProperty;
public static readonly DependencyProperty TabItemHeaderProperty;
public TableTab()
{
InitializeComponent();
TabItemHeader = "head";
}
static TableTab()
{
TableIdProperty = DependencyProperty.Register("TableId", typeof(int), typeof(TableTab));
TabItemHeaderProperty = DependencyProperty.Register("TabItemHeader", typeof(string), typeof(TableTab));
}
public int TableId
{
get { return (int)GetValue(TableIdProperty); }
set { SetValue(TableIdProperty, value); }
}
public string TabItemHeader
{
get { return (string)GetValue(TabItemHeaderProperty); }
set { SetValue(TabItemHeaderProperty, value); }
}
}
XAML:
<TabItem x:Class="RestaurantManagmentSystemProject.TableTab"
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"
Name="Tab"
Header="{Binding TabItemHeader, RelativeSource={RelativeSource Self}}"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<DockPanel>
<Grid DockPanel.Dock="Top" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0">
<DataGrid.Columns>
<DataGridTextColumn Header="Order number"/>
<DataGridTextColumn Header="Customer"/>
<DataGridTextColumn Header="Total Price"/>
<DataGridComboBoxColumn Header="Urgency"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Column="1">
<Label Content="Maximum Seats:"/>
<Label Content="Current connections:"/>
</StackPanel>
<DockPanel Grid.Column="2" LastChildFill="False" HorizontalAlignment="Right">
<Button Name="BtnEditTable" Content="Edit Table" DockPanel.Dock="Top"/>
</DockPanel>
</Grid>
<TabControl Margin="5,0,0,0">
</TabControl>
</DockPanel>
</TabItem>
什么是m
和TabContTables
?m
是一个窗口,TabContTables
是选项卡控件,我想将选项卡添加到tabtable
应该是一个TabItem
而不是UserControl
。但我希望它是一个用户控件,这样我就有了那个布局,可以通过几行代码添加它我的tabcontrol代码你仍然可以这样做。只需更改控件的基本类型。看看我的答案。
public partial class TableTab : TabItem
{
public static readonly DependencyProperty TableIdProperty;
public static readonly DependencyProperty TabItemHeaderProperty;
public TableTab()
{
InitializeComponent();
TabItemHeader = "head";
}
static TableTab()
{
TableIdProperty = DependencyProperty.Register("TableId", typeof(int), typeof(TableTab));
TabItemHeaderProperty = DependencyProperty.Register("TabItemHeader", typeof(string), typeof(TableTab));
}
public int TableId
{
get { return (int)GetValue(TableIdProperty); }
set { SetValue(TableIdProperty, value); }
}
public string TabItemHeader
{
get { return (string)GetValue(TabItemHeaderProperty); }
set { SetValue(TabItemHeaderProperty, value); }
}
}
<TabItem x:Class="RestaurantManagmentSystemProject.TableTab"
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"
Name="Tab"
Header="{Binding TabItemHeader, RelativeSource={RelativeSource Self}}"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<DockPanel>
<Grid DockPanel.Dock="Top" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0">
<DataGrid.Columns>
<DataGridTextColumn Header="Order number"/>
<DataGridTextColumn Header="Customer"/>
<DataGridTextColumn Header="Total Price"/>
<DataGridComboBoxColumn Header="Urgency"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel Grid.Column="1">
<Label Content="Maximum Seats:"/>
<Label Content="Current connections:"/>
</StackPanel>
<DockPanel Grid.Column="2" LastChildFill="False" HorizontalAlignment="Right">
<Button Name="BtnEditTable" Content="Edit Table" DockPanel.Dock="Top"/>
</DockPanel>
</Grid>
<TabControl Margin="5,0,0,0">
</TabControl>
</DockPanel>
</TabItem>