gpt4 book ai didi

c# - Windows 经典主题上的 WPF Tabcontrol TabItem 显示问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:11 25 4
gpt4 key购买 nike

我在 WPF 开发 (.net 3.5 sp1) 中遇到了一个恼人的问题,我一直在处理这个问题,它涉及在我的界面上显示一些选项卡(并旋转)。

我一直在使用普通 Aero 主题的 Windows 7 机器上进行开发,标签看起来不错

enter image description here

当我们部署给客户时,他们的机器设置为“Windows Classic”主题,选项卡显示为

enter image description here

因此它们都被“压扁”并且不显示文本。如果我将我的机器切换到 Windows Classic,那么我就可以重现。我查看了 WPF Inspector 的界面,可以看到一些不应该存在的填充值

enter image description here

如果我使用 WPF Inspector 将填充值更改为 0,那么选项卡将再次开始正确显示!我已经在我的模板上将填充设置为 0,但它似乎没有任何影响

    <TabControl TabStripPlacement="Left"
SelectedIndex="{Binding CurrentTabIndex}"
ItemsSource="{Binding CurrentPassengers}">
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Padding"
Value="0" />
<Setter Property="Margin"
Value="0" />
<Setter Property="Width"
Value="26.5" />
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter Content="{Binding NameInGDSFormat}">
<ContentPresenter.LayoutTransform>
<RotateTransform Angle="-90" />
</ContentPresenter.LayoutTransform>
</ContentPresenter>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabControl.ContentTemplate>
<!-- Lots of stuff in here for the Content Template -->
</TabControl.ContentTemplate>
</TabControl>

我已经尝试设置各种模板,填充各种元素,但似乎没有任何改变 - 那么有人知道我该如何解决这个问题吗?

编辑:如果我删除设置的“宽度”,那么它实际上会在 Windows Classic 中显示 - 但选项卡非常宽。

enter image description here

最佳答案

好的 - 所以最后我不得不创建一个全新的 ControlTemplate 来解决这个问题:)

基本上我在原始的 Classic ControlTemplate 中找到了以下内容

<ContentPresenter RecognizesAccessKey="True"
Content="{TemplateBindingReaderedContentControl.Header}"
ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}"
ContentStringFormat="{TemplateBinding HeaderedContentControl.HeaderStringFormat}"
ContentSource="Header"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="{TemplateBinding Control.Padding}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />

所以有人认为将 Margin 绑定(bind)到 Padding 是个好主意,然后当您将 Tabs 放在左侧(或右侧)时,进一步添加模板

<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Selector.IsSelected">
<Condition.Value>
<s:Boolean>True</s:Boolean>
</Condition.Value>
</Condition>
<Condition Property="TabItem.TabStripPlacement" Value="{x:Static Dock.Left}"/>
</MultiTrigger.Conditions>
<Setter Property="Control.Padding">
<Setter.Value>
<Thickness>11,2,14,2</Thickness>
</Setter.Value>
</Setter>
<Setter Property="FrameworkElement.Margin">
<Setter.Value>
<Thickness>-2,-2,-2,-2</Thickness>
</Setter.Value>
</Setter>
</MultiTrigger>

因此他们将 Padding 设置为 11,2,14,2(我在 WPF Inspector 中看到的值)。

所以我不得不覆盖模板,将边距设置为合理的值,然后将填充设置为更现实的值,以处理内容呈现器旋转​​ 270 度的情况:)

希望这对遇到此问题的其他人有所帮助!!

关于c# - Windows 经典主题上的 WPF Tabcontrol TabItem 显示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com