2017-06-22 31 views
0

MetroTabItemのヘッダーのコンテンツの周りにバッジを配置しようとすると、ヘッダーの境界でバッジがクリップされます。私はテンプレートが無駄TabItemのMahapps Metroバッジがクリップされています

にこれを引き起こして任意の明白な性質を持っているかどうかを確認するためにスヌープを使用してみました

Clipped Header Badge

ここで私ができるMetroTabItem

<metro:MetroTabItem> 
    <TabItem.Header> 
     <metro:Badged BadgePlacementMode="TopRight" BadgeBackground="Transparent"> 
      <metro:Badged.Badge> 
       <iconPacks:PackIconMaterial Kind="AlertCircleOutline" Foreground="{DynamicResource ValidationBrush5}"/> 
      </metro:Badged.Badge> 
      <TextBlock Text="Scripts" 
         Padding="0" 
         Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}, Path=(TextElement.Foreground)}" 
         FontSize="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}, Path=(TextElement.FontSize)}" 
         /> 
     </metro:Badged> 
    </TabItem.Header> 
</metro:MetroTabItem> 

ためのコードです、 TabItemBackgroundTransparentに設定されている限り、ヘッダーをオーバーラップさせるために別のコントロールからバッジを取得します。

Badge Overlapping Header

私はここだ透明の境界線を持っていますが、でも透明に設定し、この領域をオーバーラップ可能性が何もしていないTabItem上記のいずれかの他のコントロールがある場合、問題は

ままチェックしました境界線を示すために半透明の背景を持つ画像。

Clipping Issue with translucent backgrounds

EDIT:

ここMetroTabItemからヘッダ内容(スヌープから収集)ビジュアルツリーです。 PART_BadgeContainerはバッジ自体の境界線です。上の境界線は「スクリプト」コンテナです。

Snoop Visual Tree

EDIT 2:私は(2017対)デフォルトWPFのテンプレートを作成しましたので、

MM8は、完全な例を求め、現在のMahapp.MetroとMahApp.Metro参照を追加しました。 IconPacks NuGetパッケージとのようなMainWindow.xamlを設定します。

<metro:MetroWindow x:Class="TabItemBadgeLayout.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"  
    xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid Margin="0 10 0 0"> 
     <metro:MetroAnimatedTabControl> 
      <metro:MetroTabItem> 
       <TabItem.Header> 
        <metro:Badged BadgePlacementMode="TopRight" BadgeBackground="Transparent"> 
         <metro:Badged.Badge> 
          <iconPacks:PackIconMaterial Kind="AlertCircleOutline" Foreground="{DynamicResource ValidationBrush5}"/> 
         </metro:Badged.Badge> 
         <TextBlock Text="Scripts" 
          Padding="0" 
          Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type metro:ContentControlEx}}, Path=(TextElement.Foreground)}" 
          FontSize="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type metro:ContentControlEx}}, Path=(TextElement.FontSize)}" 
          /> 
        </metro:Badged> 
       </TabItem.Header> 
      </metro:MetroTabItem> 
      <metro:MetroTabItem> 
       <TabItem.Header> 
        <metro:Badged BadgePlacementMode="TopRight" BadgeBackground="Transparent"> 
         <metro:Badged.Badge> 
          <iconPacks:PackIconMaterial Kind="AlertCircleOutline" Foreground="{DynamicResource ValidationBrush5}"/> 
         </metro:Badged.Badge> 
         <TextBlock Text="Tasks" 
          Padding="0" 
          Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type metro:ContentControlEx}}, Path=(TextElement.Foreground)}" 
          FontSize="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type metro:ContentControlEx}}, Path=(TextElement.FontSize)}" 
          /> 
        </metro:Badged> 
       </TabItem.Header> 
      </metro:MetroTabItem> 
     </metro:MetroAnimatedTabControl> 
    </Grid> 
</metro:MetroWindow> 

App.xaml:

<Application x:Class="TabItemBadgeLayout.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:TabItemBadgeLayout" 
     StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> 
       <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 
012ここ

は結果です:

Minimal Setup

+0

。それは悲しいことだ。 'Scripts'の 'c'が緑のアイコンの上にあります。それは画像3で見るのは簡単です。とにかくおそらく無関係です。あなたはあなたがスヌープをしていると言っています、スヌープUIでそれを見ると、ビジュアルツリーに付いているバッジは何ですか? – finlaybob

+0

ああそうです、ごめんなさい、気づかなかったです。ビジュアルツリーのスクリーンショットで編集しました – Blinx

答えて

1

あなたはBadged要素のためのマージンを指定することができます。緑色のバッジは、タブ項目のヘッダーを重複していない第2の画像では、明確にするために

<metro:MetroTabControl> 
    <metro:MetroTabControl.Resources> 
     <Style TargetType="metro:Badged" BasedOn="{StaticResource {x:Type metro:Badged}}"> 
      <Setter Property="Margin" Value="0 10 2 0" /> 
     </Style> 
    </metro:MetroTabControl.Resources> 
    <metro:MetroTabItem> 
     <TabItem.Header> 
      <metro:Badged BadgePlacementMode="TopRight" BadgeBackground="Transparent"> 
       <metro:Badged.Badge> 
        <iconPacks:PackIconMaterial Kind="AlertCircleOutline" Foreground="{DynamicResource ValidationBrush5}"/> 
       </metro:Badged.Badge> 
       <TextBlock Text="Scripts" 
          Padding="0" 
          Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type metro:ContentControlEx}}, Path=(TextElement.Foreground)}" 
          FontSize="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type metro:ContentControlEx}}, Path=(TextElement.FontSize)}" 
          /> 
      </metro:Badged> 
     </TabItem.Header> 
    </metro:MetroTabItem> 
    ... 
+0

TabItemに余白を設定しても機能しません。しかし、 'metro:Badged'コントロールにマージンを置くと、(コンテナを大きくすることによって)クリッピングが回避されますが、レイアウトは変更されます。私はこれが回避策だと思うが理想的には私はクリッピングを無効にしたいと思う。 – Blinx

+0

それは確かに私のために働く。次に、親のTabControlに余白を置きます。 – mm8

+0

これはデザイナーでは動作しているようですが、実行中ではないようです。親のマージンは(少なくとも私のために)どちらも動作しません。デザイナーではなく、実行中/デバッグ中に正しく表示されていますか? – Blinx

関連する問題