2012-11-08 6 views
1

Je suis en train de développer un simulateur de Turing Machine pour un cours de théorie, et j'essaie de changer la couleur d'arrière-plan de la zone de saisie en fonction de l'acceptation de la langue par la machine (fondamentalement, une couleur sur l'autre selon si c'est une entrée valide).Impossible de configurer Combobox.Background

Depuis que je veux fournir quelques exemples d'entrées, il doit être un ComboBox. Puisque le professeur a besoin de tester ses propres entrées, il doit aussi être modifiable. Donc nous en sommes là.

J'ai essayé de définir la propriété ComboBox.Background à la fois par programmation et en utilisant XAML (via l'éditeur de propriétés), et aucun ne fonctionne. Cependant, je n'ai aucun problème à régler ComboBox.Foreground.

Voici mon XAML:

<Window x:Class="Turing.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Turing Machine Emulator" Height="400" Width="600" Loaded="onload" MinHeight="500" MinWidth="600"> 

    <Grid> 
     <ComboBox x:Name="drpProblem" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="changeproblem"/> 
     <Label x:Name="lblDescription" Content="Language Description" Margin="135,7,90,0" VerticalAlignment="Top"/> 
     <Grid Margin="10,0,10,35" Height="24" VerticalAlignment="Bottom"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="10*"/> 
       <ColumnDefinition Width="1*"/> 
       <ColumnDefinition Width="10*"/> 
      </Grid.ColumnDefinitions> 
      <Label x:Name="lblLeft" Content="left" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" Padding="0" Margin="0,0,10,0" FontFamily="Consolas"/> 
      <Label x:Name="lblRight" Content="right" Grid.Column="2" VerticalContentAlignment="Center" Padding="0" Margin="10,0,0,0" FontFamily="Consolas"/> 
      <Label x:Name="lblCenter" Content="cur" Grid.Column="1" Height="24" Padding="0" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Background="#FFC5FFA4" FontFamily="Consolas" FontSize="16"/> 
     </Grid> 
     <Button x:Name="btnIterate" Content="Iterate" Margin="10,0,0,64" Height="20" VerticalAlignment="Bottom" Click="btnIterate_Click" HorizontalAlignment="Left" Width="236"/> 
<!-- This one right here --> 
     <ComboBox x:Name="txtInput" Height="23" Margin="10,0,10,89" Text="Input String" VerticalAlignment="Bottom" FontFamily="Consolas" VerticalContentAlignment="Center" TextBoxBase.TextChanged="cboGetInput" BorderBrush="{x:Null}" Foreground="Black" Background="#FF874343" IsEditable="True" /> 
     <TextBox x:Name="txtMs" Height="20" Margin="251,0,172,64" TextWrapping="Wrap" Text="wait (seconds)" VerticalAlignment="Bottom"/> 
     <Button x:Name="btnAutoRun" Content="AutoRun" Margin="0,0,10,64" Click="btnAutoRun_Click" Height="20" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="157"/> 
     <TextBox x:Name="txtTM" Margin="10,38,10,142" TextWrapping="Wrap" Text="Language" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FontFamily="Consolas" FontSize="14"/> 
     <Button x:Name="btnLoadLang" Content="Load" Margin="10,0,10,117" Height="20" VerticalAlignment="Bottom" Click="changeproblem"/> 
     <StatusBar Height="30" VerticalAlignment="Bottom"> 
      <TextBlock x:Name="stTXTName" Text="StateName"/> 
      <Separator/> 
      <TextBlock x:Name="stTXTDescription" Text="StateDescription"/> 
      <Separator/> 
      <TextBlock x:Name="stTXTTransition" Text="NextTransition"/> 
      <Separator/> 
      <TextBlock x:Name="stTXTNext" Text="NextState"/> 
     </StatusBar> 

    </Grid> 
</Window> 

et est ici le code que je utilise pour essayer de changer les couleurs autour de:

if (TM.AcceptsString(txtInput.Text)) 
{ 
    txtInput.Background = Brushes.LightGreen; 
    txtInput.Foreground = Brushes.LightGreen; 
} 
else 
{ 
    txtInput.Background = Brushes.Pink; 
    txtInput.Foreground = Brushes.Pink; 
} 

Les changements de premier plan comme prévu, mais la couleur de fond ne change jamais du blanc par défaut. Est-ce que je fais quelque chose de mal? Existe-t-il un contrôle de composant dans ComboBox pour lequel je dois définir des propriétés, comme je l'ai fait avec TextBoxBase.TextChanged?

+0

Je viens essayé votre code dans un projet de test et cela fonctionne bien pour moi. Bien sûr, vous ne le réglez pas en blanc ou null plus tard dans votre code? –

+0

Positif. Le fait est qu'il ne devrait jamais être blanc puisque chaque corde est acceptée ou rejetée. –

+0

De plus, la couleur d'arrière-plan n'apparaît même pas dans le Winder de Designer (à partir du XAML, elle devrait être beaucoup * non * blanche) –

Répondre

0

Définissez l'attribut FlatStyle de la zone de liste déroulante sur FlatStyle.Flat. Cela a résolu un problème similaire que j'ai rencontré lorsque le thème Win 7 Aero est activé: La couleur de fond de la zone de liste déroulante n'apparaît pas dans le paramètre FlatStyle par défaut FlatStyle.Standard.

+0

Malheureusement, je suis à l'étranger maintenant et n'ai pas les moyens de tester cela (bien que le simulateur lui-même s'est avéré magnifiquement!). promis * Je vais vérifier quand je serai rentré dans quelques mois. –

0

J'ai eu un problème similaire et a été en mesure de le résoudre par la génération automatique du modèle pour le ComboBox dans Visual Studio 2015 (Clic droit ComboBox dans la fenêtre Design -> Modifier le modèle -> Modifier une copie)

Questions connexes