2015-10-14 5 views
4

Я использую тему Mahapps Metro в своем проекте. Я хочу создать TabControl, где будет TabItem. Тема Mahapps обеспечивает изменение цвета текста TabItem при выборе TabItem и т. Д. Я хочу привязать этот цвет переднего плана к моему изображению. У меня есть решение этой проблемы, но я думаю, что это неверно.Связывание текущего переднего плана с Rectangle.Fill свойство

«Bad» Код (но он работает):

<TabItem> 
    <TabItem.HeaderTemplate> 
     <DataTemplate> 
     <Grid Margin="0,5,0,0"> 
      <TextBlock x:Name="myTextBlock" /> 
      <Rectangle Width="28.947" Height="25" Fill="{Binding ElementName=myTextBlock, Path=Foreground}"> 
       <Rectangle.OpacityMask> 
        <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_image_gallery}" /> 
       </Rectangle.OpacityMask> 
      </Rectangle> 
     </Grid> 
     </DataTemplate> 
    </TabItem.HeaderTemplate> 
</TabItem> 
+2

почему вы думаете, что это плохо? Я понимаю, что вам нужна форма (например, ваше прозрачное изображение), но заполненная «Foreground» в «TextBlock». То, что вы делаете, - это правильный подход, когда речь идет о формировании сложной формы, определенной некоторым образом, использование «OpacityMask» - единственный способ пойти (если вы не можете преобразовать изображение в некоторый SVG, а затем в данные геометрии XAML - таким образом намного сложнее). –

ответ

2

Вы можете использовать TemplateBinding, если вы не хотите связываться с внутренней TextBlock.

<TabItem.HeaderTemplate> 
    <DataTemplate> 
     <Grid Margin="0 5 0 0"> 
      <TextBlock Text="{Binding}" /> 
      <Rectangle Width="28.947" 
         Height="25" 
         Fill="{TemplateBinding TextElement.Foreground}"> 
       <Rectangle.OpacityMask> 
        <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_image_gallery}" /> 
       </Rectangle.OpacityMask> 
      </Rectangle> 
     </Grid> 
    </DataTemplate> 
</TabItem.HeaderTemplate> 
Смежные вопросы