如何解决在.cs文件中使用silverlight的自定义Tabcontrol? 在自定义tabitem标头中添加堆栈面板不起作用
| 在Silverlight Tab控件中,我使用xaml完美地添加了自定义标签页眉(名称和关闭按钮)。 {xaml代码}<Grid Height=\"559\" Name=\"grid1\" Width=\"953\">
<sdk:TabControl Height=\"391\" HorizontalAlignment=\"Left\" Margin=\"105,57,0\" Name=\"tabControl1\" VerticalAlignment=\"Top\" Width=\"729\">
<sdk:TabItem Name=\"tabItem1\" IsTabStop=\"False\">
<sdk:TabItem.Header>
<StackPanel Orientation=\"Horizontal\">
<TextBlock Text=\"New Tab\" Margin=\"1,1,1\" VerticalAlignment=\"Center\" />
<Button Content=\"X\" />
</StackPanel>
</sdk:TabItem.Header>
<Grid />
</sdk:TabItem>
</sdk:TabControl>
<Button Content=\"+\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"74,0\" Name=\"button1\" VerticalAlignment=\"Top\" Width=\"31\" Click=\"button1_Click\" />
<Button Content=\"-\" Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"12,492,0\" Name=\"button2\" VerticalAlignment=\"Top\" Width=\"31\" Click=\"button2_Click\" Visibility=\"Collapsed\" />
相同的实现尝试使用.cs,但是我可以在新标签页眉内添加堆栈面板
代码供您参考
StackPanel st = new StackPanel();
st.Orientation = Orientation.Horizontal;
TextBlock txtb = new TextBlock();
txtb.Text = \"test\";
txtb.Margin = new Thickness(1,1);
txtb.VerticalAlignment = VerticalAlignment.Center;
st.Children.Add(txtb);
Button btn = new Button();
btn.Content = \"X\";
st.Children.Add(btn);
tabControl1.Items.Add(new TabItem
{
Header =st
});
帮我解决这个问题。我需要带有按钮控件的“自定义”标签页眉
解决方法
您应该设置
tbItem.Header = st
。 tbItem.Content用于定义选项卡的内容,而不是选项卡标题。
您的代码看起来像这样
StackPanel st = new StackPanel();
st.Orientation = Orientation.Horizontal;
TextBlock txtb = new TextBlock();
txtb.Text = \"New Tab\";
txtb.Margin = new Thickness(1,1,1);
txtb.VerticalAlignment = VerticalAlignment.Center;
st.Children.Add(txtb);
Button btn = new Button();
btn.Content = \"X\";
st.Children.Add(btn);
TabItem tbitem = new TabItem();
// Set the header to the stack panel with the
// TextBlock and Button
tbitem.Header = st;
// This is where you define the content
// of the tab page. Here I just added a Grid
// as an example.
tbitem.Content = new Grid();
tabControl1.Items.Add(tbitem);
编辑:这是一个完整的示例
使用TabControl的XAML-注意,我钩住了Loaded事件,在这里将添加动态TabItem。
<UserControl x:Class=\"SilverlightApplication1.MainPage\"
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:controls=\"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls\"
mc:Ignorable=\"d\"
d:DesignHeight=\"300\" d:DesignWidth=\"400\" >
<Grid x:Name=\"LayoutRoot\" Background=\"White\">
<Grid x:Name=\"Container\">
<controls:TabControl Name=\"tabControl1\" Loaded=\"TabControl_Loaded\">
</controls:TabControl>
</Grid>
</Grid>
</UserControl>
这是背后的代码
using System;
using System.Windows;
using System.Windows.Controls;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void TabControl_Loaded(object sender,RoutedEventArgs e)
{
StackPanel st = new StackPanel();
st.Orientation = Orientation.Horizontal;
TextBlock txtb = new TextBlock();
txtb.Text = \"New Tab\";
txtb.Margin = new Thickness(1,1);
txtb.VerticalAlignment = VerticalAlignment.Center;
st.Children.Add(txtb);
Button btn = new Button();
btn.Content = \"X\";
st.Children.Add(btn);
TabItem tbitem = new TabItem();
// Set the header to the stack panel with the
// TextBlock and Button
tbitem.Header = st;
// This is where you define the content
// of the tab page. Here I just added a Grid
// as an example.
tbitem.Content = new Grid();
tabControl1.Items.Add(tbitem);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。