Pathオブジェクトで縦型TabItemを作成しました。選択されたTabItemは選択されていないTabItemと重なり合っています。オーバーラップは、TabItemテンプレートに負のマージンを設定することによって行われます。WPF TabControlでTabItemの重なり順を変更する方法
現在、選択されていないTabItemの場合、TabItemは下のTabItemによってオーバーラップされます。たとえば、画像のタブ4は重なります。タブ3とタブ3はタブ2と重なります。
未選択のタブアイテムの重なり順を変更して、未選択のタブアイテムが下のタブアイテムと重なり、タブアイテム上記、例えばタブ2が重なってタブ3とタブ3がタブ4に重なっています。
TabPanelのFlowDirectionプロパティを設定しようとしましたが、これは機能しません。
どうすればこの問題を解決できますか?どんな助けもありがとうございます。前もって感謝します!
非選択TabItemsの間違った重複:
XAML-コード:
<Style x:Key="styleMainNavTabControl" TargetType="{x:Type TabControl}">
<Setter Property="TabStripPlacement" Value="Left" />
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="White" BorderBrush="Black" BorderThickness="0,0,1,0" Padding="20">
<ContentPresenter ContentSource="SelectedContent" />
</Border>
<Border Grid.Column="1" Padding="0,30,10,0" Background="#F7F3F7">
<TabPanel Panel.ZIndex="1" Margin="-1,0,0,0" FlowDirection="RightToLeft" IsItemsHost="True" Background="Transparent"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="styleMainNavTabItem" TargetType="{x:Type TabItem}">
<Setter Property="MinHeight" Value="90" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid Margin="0,0,0,-35">
<Path Name="TabPath" Stroke="Black" StrokeThickness="1" Fill="LightGray" Data="M 0,0 a 10,10 0 0 0 10,10 h 150 a 20,20 0 0 1 20,20 v 60 a 20,20 0 0 1 -20,20 h -150 a 10,10 0 0 0 -10,10 z" />
<ContentPresenter ContentSource="Header" Margin="10,2,10,2" VerticalAlignment="Center" TextElement.Foreground="#FF000000"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Panel.ZIndex" Value="100" />
<Setter TargetName="TabPath" Property="Fill" Value="White" />
<Setter TargetName="TabPath" Property="Data" Value="M 0,0 a 10,10 0 0 0 10,10 h 150 a 20,20 0 0 1 20,20 v 60 a 20,20 0 0 1 -20,20 h -150 a 10,10 0 0 0 -10,10" />
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Panel.ZIndex" Value="90" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
あなたのそれはそうのようになります。ソリューションは正常に動作します! "var index = tabControl.ItemContainerGenerator.IndexFromContainer(tabItem);"という行を除いて、常に-1を返すので、 "int index = tabControl.Items.IndexOf(tabItem);"を使用します。代わりに。今それは動作します。どうもありがとう! – sannoble
ああ、ItemsSourceではなく、TabItemsを直接使用しているからだと思います。私はItemContainerGeneratorがその場合でも動作すると思っていましたが、明らかに間違っていました。それはあなたのためにうれしい! –
乾杯=)私はこのコードを私に面倒を与える一般的なTabControlのために使用しました。 ZIndexを* Selected *トリガーにハードコードしたくないので、このSetterを* Selected *と* Not Selected *トリガーの両方にダンプしました。次に、戻り値を変更しました: 'if(tabItem.IsSelected)return count;それ以外の場合はcount-indexを返します。 – paddy