C# WPF选项卡项样式拧紧控制位置
我创建了一个新的TabItem样式,它看起来就像我想要的那样。但现在它将所有放置在TabItem上的控件的位置都搞乱了。它将它们从TabItem的左上区域移动到右下区域。任何帮助都将不胜感激。(是的,我肯定我需要C#而不是XAML的样式)C# WPF选项卡项样式拧紧控制位置,c#,wpf,C#,Wpf,我创建了一个新的TabItem样式,它看起来就像我想要的那样。但现在它将所有放置在TabItem上的控件的位置都搞乱了。它将它们从TabItem的左上区域移动到右下区域。任何帮助都将不胜感激。(是的,我肯定我需要C#而不是XAML的样式) 所以你的第一个问题是这两行: functionReturnValue.Setters.Add(new Setter(TabItem.HorizontalContentAlignmentProperty, System.Windows.HorizontalAli
所以你的第一个问题是这两行:
functionReturnValue.Setters.Add(new Setter(TabItem.HorizontalContentAlignmentProperty, System.Windows.HorizontalAlignment.Center));
functionReturnValue.Setters.Add(new Setter(TabItem.VerticalContentAlignmentProperty, System.Windows.VerticalAlignment.Center));
省略那些;它们作用于选项卡项内容,而不是标题
要重新设置标题样式,您有很多选项
这将在内容演示者周围留出20个单位的空间:
L_ContentPresenter.SetValue(ContentPresenter.MarginProperty, new Thickness(20));
20岁相当武断;当然,你可以使用自己的价值观。这将为其提供20个单位侧边距和10个单位顶部/底部边距:
L_ContentPresenter.SetValue(ContentPresenter.MarginProperty, new Thickness(20, 10, 20, 10));
您还可以将边框
或其他内容放在标题控件模板内,围绕ContentPresenter
,并对包含控件的填充或边距进行处理。这种东西在XAML中使用起来非常容易,所以我不想在C#中麻烦地使用它
您可以设置选项卡项
样式集标题模板
,这是一个数据模板
:
var headerTemplate = new DataTemplate();
var label = new FrameworkElementFactory(typeof(Label));
label.SetBinding(Label.ContentProperty, new Binding());
label.SetValue(Label.MarginProperty, new Thickness(16, 12, 16, 12));
headerTemplate.VisualTree = label;
functionReturnValue.Setters.Add(new Setter(TabItem.HeaderTemplateProperty, headerTemplate));
最后,我想重申,无论您在运行时需要对样式执行什么操作,您都可以在XAML中比在C#中更轻松、更易于维护。为什么您认为您需要在C#中而不是在XAML中执行此操作?基本上没有一个熟悉WPF的人会用C#来做这件事,这不是巧合。我当然不想尝试将上述代码翻译成对我有意义的术语。这是你的生活,但如果你在这件事上半途而废,你会得到更多的帮助。我试过你的代码。它使内容居中,这似乎是您的意图,因为您正在将
水平内容对齐
和垂直内容对齐
都设置为居中
。。请提供一个能证明你所看到的行为的例子。Thx,这就是为什么会出现这种糟糕的情况。我的意图实际上只是将ItemHeader居中。现在我只需要弄清楚如何只集中ItemHeader内容。在C#中执行此操作的原因是我需要在运行时动态更改部分样式。请尝试在TabItem样式中设置TabItem.HeaderTemplate
。IIRC标题的ControlTemplate是在TabControl template中定义的。未获取它:-(我是否需要为TabItem.HederTemplate创建单独的模板
var headerTemplate = new DataTemplate();
var label = new FrameworkElementFactory(typeof(Label));
label.SetBinding(Label.ContentProperty, new Binding());
label.SetValue(Label.MarginProperty, new Thickness(16, 12, 16, 12));
headerTemplate.VisualTree = label;
functionReturnValue.Setters.Add(new Setter(TabItem.HeaderTemplateProperty, headerTemplate));