2016-01-20 1 views
3

Bonjour J'ai essayé de lier SolidColorBrush à la propriété Background de la bordure dans Control Template For TabItem. Mais lorsque je change la valeur de la ressource SolidColorBrush, il dit "Impossible de définir une propriété sur l'objet '# FF808080' car il est en lecture seule." Où comme avec le bouton de stock sans ControlTemplate cela fonctionne parfaitement.Liaison SolidColorBrush à ControlTemplate Arrière-plan

Voici mon code. (XAML)

<Window.Resources> 
    <SolidColorBrush x:Key="SolidColorBrush2" Color="Gray"/> 
    <SolidColorBrush x:Key="SolidColorBrush3" Color="Black"/> 

    <Style x:Key="TabItemTemplate" TargetType="TabItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="TabItem"> 
        <Border Name="Tab" Height="30" Padding="10 0" Margin="0 0 10 0"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"> 
          <ContentPresenter x:Name="TabItemContent" HorizontalAlignment="Center" VerticalAlignment="Center" ContentSource="Header"></ContentPresenter> 
         </TextBlock> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter TargetName="Tab" Property="Background" Value="{DynamicResource SolidColorBrush3}"/> 
         </Trigger> 
         <Trigger Property="IsSelected" Value="False"> 
          <Setter TargetName="Tab" Property="Background" Value="{DynamicResource SolidColorBrush2}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <TabControl Name="TabControlRepaymentWorkflowInner" Grid.Row="0"> 
     <TabItem Header="ABC" Style="{DynamicResource TabItemTemplate}" Foreground="White"> 
      <StackPanel Orientation="Vertical" Margin="0 0 5 0" HorizontalAlignment="Center"> 
       <TextBlock Margin="5 0 0 0" Text="Enter note for Front Office"/> 
       <Button Background="{DynamicResource SolidColorBrush2}" Content="Button1"/> 
      </StackPanel> 
     </TabItem> 
     <TabItem Header="DEF" Style="{DynamicResource TabItemTemplate}" Foreground="White"> 
      <StackPanel Orientation="Vertical" Margin="0 0 5 0" HorizontalAlignment="Center"> 
       <TextBlock Margin="5 0 0 0" Text="Enter note for Front Office"/> 
       <Button Background="{DynamicResource SolidColorBrush2}" Content="Button2"/> 
      </StackPanel> 
     </TabItem> 
     <TabItem Header="GHI" Style="{DynamicResource TabItemTemplate}" Foreground="White"> 
      <StackPanel Orientation="Vertical" Margin="0 0 5 0" HorizontalAlignment="Center"> 
       <TextBlock Margin="5 0 0 0" Text="Enter note for Front Office"/> 
       <Button Background="{DynamicResource SolidColorBrush2}" Content="Button3"/> 
      </StackPanel> 
     </TabItem> 
    </TabControl> 
    <Button Grid.Row="1" HorizontalAlignment="Center" Height="30" VerticalAlignment="Top" Click="ChangeTheme_Click">Change Theme</Button> 
</Grid> 

Voici mon code C#

private void ChangeTheme_Click(object sender, RoutedEventArgs e) 
    { 
     SolidColorBrush brush2 = (SolidColorBrush)Resources["SolidColorBrush2"]; 
     SolidColorBrush brush3 = (SolidColorBrush)Resources["SolidColorBrush3"]; 
     brush2.Color = Color.FromArgb(255, 200, 200, 200); 
     brush3.Color = Color.FromArgb(255, 251, 132, 61); 
    } 

Et l'erreur:

Répondre

1

Excusez-moi, mais tu fais thématisation mal. Au lieu de changer les propriétés de SolidColorBrush, allez pour l'ensemble de remplacement de l'élément de ressource, tel que décrit dans cet article ici sur le SO: see @Łukasz Rejman answer

Par exemple:

Resources["SolidColorBrush2"] = new SolidColorBrush(Color.FromArgb(255, 200, 200, 200)); 
Resources["SolidColorBrush3"] = new SolidColorBrush(Color.FromArgb(255, 251, 132, 61)); 
+0

Merci Maté. :) Le remplacement de SolidColorBrush était requis. –