我需要一些方法来隐藏TabControl的标题(我将以编程方式切换选定的选项卡).我怎样才能做到这一点?
我正试图在右边对齐一个tabcontrol条.
只是要清楚 - 我希望顶部的标签(tabstripplacement),但在右侧对齐.
我有一个TabControl.每个TabItem的标题包含一个带有图标和Label的StackPanel.
<TabControl>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Image Source="/LoginPanel;component/Icons/icoLogin.ico"</Image>
<Label VerticalContentAlignment="Center">Login</Label>
</StackPanel>
</TabItem.Header>
</TabItem.Header>
<!--some further code here-->
<TabItem>
<!--some further code here-->
<TabControl>
Run Code Online (Sandbox Code Playgroud)
每个未选择的TabItem中的每个图标都按预期显示.当前所选TabItem中的图标有些混浊.如果我切换到另一个标签,取消选择的标签图标变得清晰; 新选择的图标变为阴天.
我已经尝试过以下方法来解决这个问题:
SnapsToDevicePixels="True"
Run Code Online (Sandbox Code Playgroud)
但没有任何反应
要么
Width="32" Height="32"
Run Code Online (Sandbox Code Playgroud)
要么
Stretch="None"
Run Code Online (Sandbox Code Playgroud)
防止缩放.所有这些都没有任何影响.有人可以给我一个提示吗?提前致谢
我正在检查TabControl的内置.net控件的来源,我看到它在决定是否向集合添加或插入TabPage之前引用此属性.
if (this.owner.IsHandleCreated)
{
this.owner.AddTabPage(tabPage, tabPage.GetTCITEM());
}
else
{
this.owner.Insert(this.owner.TabCount, tabPage);
}
Run Code Online (Sandbox Code Playgroud)
这两个函数最终实现了相同的目标 - 它们将TabPage添加到内部"TabPages"集合的末尾......但我只是不明白为什么它应该与您使用的函数有关.
this指的ControlCollection是覆盖内置的Control.ControlCollection.owner是使用的TabControl ControlCollection.
我想让一个标签控件有一个"x"(关闭按钮)和"+"(新标签按钮).我找到了一个添加a的解决方案x button,标签现在看起来像这样:
但我想+现在添加一个黑色圆圈的位置.我不知道如何,我尝试绘制Paint最后一个标签的事件,如下所示:
var p = tabs.TabPages[tabs.TabCount - 1];
p.Paint += new PaintEventHandler(tab_OnDrawPage);
private void tab_OnDrawPage(object sender, PaintEventArgs e)
{
// e.ClipRectangle.
e.Graphics.DrawString("+",
new Font("verdana",
10,
FontStyle.Bold),
Brushes.Black,
e.ClipRectangle.X + 10,
e.ClipRectangle.Y + 10);
}
Run Code Online (Sandbox Code Playgroud)
但它并没有显示任何吸引力.我想这与我传递给他们的位置有关DrawString(),但我不知道要使用的正确位置.我使用+10将它从最后一个标签中拉出来.如何解决?我自己没有做任何自定义绘图,我正在学习它.
现在,我有一个WPF窗口,如下所示:
TabControl的所有选项卡标签都位于中心位置http://img33.yfrog.com/img33/9996/tabcontrolcenteredheade.jpg
我希望它看起来像这样(Photoshop doctored图像):
TabControl的所有选项卡标签都是左对齐的http://img42.yfrog.com/img42/6687/tabcontrolleftalignedhe.jpg
这可能没有完全重做TabControl吗?
我试图搞乱TabControl,ControlTemplate等等,但没有我尝试了预期的效果.
编辑:
如果我尝试这个解决方案(由T Levesque提供)......
<TabControl...>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
</TabControl.ItemContainerStyle>
...
</TabControl>
Run Code Online (Sandbox Code Playgroud)
......我明白了:
TabControl的所有选项卡标签都是左对齐的,但选项卡不能正确伸展http://img14.imageshack.us/img14/6687/tabcontrolleftalignedhe.jpg
哪个很接近,但最终看起来有点像直方图.
编辑2:
为了记录,我最终结合R. Copsey和T. Levesque的答案来达到这个目的:
<TabControl...>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
</TabControl.ItemContainerStyle>
...
</TabControl>
Run Code Online (Sandbox Code Playgroud) 以下示例xaml使每个选项卡项共享相同的TextBox.这是有道理的,在某种程度上我猜...但它是意想不到的行为,几乎感觉就像一个bug.我在文档中找不到任何解释行为的信息,或者如何正确解决这个问题.
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem Name="tab1" />
<TabItem Name="tab2" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)
当在tab1和tab2之间切换时,使用相同的TextBox,当我期望每个选项卡有一个新的TextBox时.我怎样才能得到后一种情况?
对TabItem进行子类化并将其内容默认设置为TextBox是一种方法,但我只是想确保没有我遗漏的东西.
编辑
我意识到为每个选项卡显式设置内容将解决问题,但选项卡将动态创建.我想使用内容模板,以便我可以通过数据绑定添加新选项卡,并使内容不共享,因为它会导致奇怪的行为.
也许使用TabControl的当前实现,没有声明方法来解决这个问题.在代码中设置内容非常简单,但在WPF中这样的事情总是感觉不对.对我来说,这似乎是TabControl的不合理优化; 对于不实用的情况,它至少应该是可选的.
我在WPF中有一个TabControl.我想找到更改标签时发生的事件.这个活动的名字是什么?
我想在不同页面是TabItems的应用程序中使用MVVM.
为此,我使用了一个可观察的视图模型(Items)集合,并将其绑定到tabcontrols ItemSource.
对于每个视图模型,我创建了一个单独的数据模板来呈现正确的视图,如下所示:
<DataTemplate DataType="{x:Type baseVm:AViewModel}">
<baseVw:AView />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
要在选项卡的标题中显示正确的名称,我创建了另一个数据模板,以应用于每个选项卡控件的元素:
<DataTemplate x:Key="ViewModelTabTemplate">
<DockPanel>
<ContentPresenter Content="{Binding Path=Name}"/>
</DockPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
选项卡控件如下所示:
<TabControl x:Name="myTabControl"
ItemsSource="{Binding Items}"
ItemTemplate="{DynamicResource ViewModelTabTemplate}">
</TabControl>
Run Code Online (Sandbox Code Playgroud)
我现在要做的是在包含集合的视图模型中启用/禁用选项卡.视图模型的基类包含一个依赖项属性IsEnabled,我想将它绑定到视图.如果我直接在视图中这样做:
IsEnabled="{Binding IsEnabled, FallbackValue=true}"
Run Code Online (Sandbox Code Playgroud)
当我将IsEnabled属性设置为false时,标签页的内容被禁用.但我真正想要的是也禁用tabpage的标签而不仅仅是内容.
谢谢你的帮助!