Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF选项卡项样式拧紧控制位置_C#_Wpf - Fatal编程技术网

C# WPF选项卡项样式拧紧控制位置

C# WPF选项卡项样式拧紧控制位置,c#,wpf,C#,Wpf,我创建了一个新的TabItem样式,它看起来就像我想要的那样。但现在它将所有放置在TabItem上的控件的位置都搞乱了。它将它们从TabItem的左上区域移动到右下区域。任何帮助都将不胜感激。(是的,我肯定我需要C#而不是XAML的样式) 所以你的第一个问题是这两行: functionReturnValue.Setters.Add(new Setter(TabItem.HorizontalContentAlignmentProperty, System.Windows.HorizontalAli

我创建了一个新的TabItem样式,它看起来就像我想要的那样。但现在它将所有放置在TabItem上的控件的位置都搞乱了。它将它们从TabItem的左上区域移动到右下区域。任何帮助都将不胜感激。(是的,我肯定我需要C#而不是XAML的样式)


所以你的第一个问题是这两行:

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));