2012-11-08 146 views
1

我正在開發一個理論類的圖靈機模擬器,我試圖根據機器是否接受語言來改變輸入區域的背景顏色(基本上,一種顏色取決於其是否是有效的輸入)。似乎無法設置Combobox.Background

由於我想提供一些示例輸入,它需要是一個組合框。由於教授需要測試他自己的輸入,所以它也必須是可編輯的。所以,我們在這裏。

我試過以編程方式設置ComboBox.Background屬性,並使用XAML(通過屬性編輯器),都沒有工作。但是,我沒有設置ComboBox.Foreground的問題。

這是我的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> 

,這裏是我使用嘗試改變周圍的顏色代碼:

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

前景變化預期,但背景顏色永不改變默認的白色。難道我做錯了什麼? ComboBox中是否有一些組件控件需要設置屬性,例如TextBoxBase.TextChanged

+0

我只是在一個測試項目中試過你的代碼,它對我來說工作正常。當然,你以後在你的代碼中沒有把它設置成白色或空值? –

+0

積極。事實是,它永遠不會是白色的 - 因爲每個字符串都被接受或拒絕。 –

+0

另外,背景顏色甚至沒有出現在設計器卷繞器中(來自XAML,它應該是非常*非*白色) –

回答

0

將組合框的FlatStyle屬性設置爲FlatStyle.Flat。這解決了我在Win 7 Aero主題打開時遇到的類似問題:ComboBox的背景色在默認的FlatStyle設置FlatStyle.Standard中不顯示。

+0

不幸的是,我現在在國外,並沒有辦法測試這個(儘管模擬器本身變得非常漂亮!)。承諾*一旦我在幾個月後回家,我會檢查它。 –

0

我也有類似的問題,並能夠通過解決它自動生成在Visual Studio 2015組合框模板(右在設計窗口中點擊組合框 - >編輯模板 - >編輯副本)