2014-01-13 89 views
1

我試圖使用XAML創建一個組合框,該列表是一個下拉列表,該列表中的斜體已經在框中包含默認文本,並且當您單擊下拉菜單以擴大選項列表,所有選項將以普通文本而非斜體顯示。進行選擇時,即使與默認文本位於相同位置,我也希望所選選項仍然保持正常而不是斜體。我是XAML新手,我不確定如何做到這一點,或者甚至有可能嗎?在XAML中更改組合框的默認文本樣式

我的組合框是現在,如下所示,默認文本顯示在屬性'文本'。基本上,我想'默認文本'是斜體,但沒有別的。

<ComboBox x:Name="ColumnComboBox" Grid.Column="1" Width="200" Margin="0,2" IsEditable="True" Text="Default Text" FontWeight="Normal" /> 

任何幫助,非常感謝。

回答

1

你需要做更多的工作來實現這一點。
試試這個

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">   
    <Grid> 
     <ComboBox Name="comboBox1" Margin="40,55,192,225" FontStyle="Italic"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <Label Content="{Binding}" ></Label> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
      <ComboBox.ItemContainerStyle> 
       <Style TargetType="{x:Type ComboBoxItem}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
           <Label Name="lbl" Content="{Binding}" ></Label> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsHighlighted" Value="True"> 
             <Setter TargetName="lbl" Property="FontStyle" Value="Normal"> </Setter> 
             <Setter TargetName="lbl" Property="Background" Value="AliceBlue"></Setter> 
            </Trigger> 
            <Trigger Property="IsSelected" Value="True"> 
             <Setter TargetName="lbl" Property="FontStyle" Value="Italic"></Setter> 
            </Trigger> 
            <Trigger Property="IsSelected" Value="False"> 
             <Setter TargetName="lbl" Property="FontStyle" Value="Normal"></Setter> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 

         </Setter.Value> 
        </Setter> 
       </Style> 
      </ComboBox.ItemContainerStyle> 

     </ComboBox> 




    </Grid> 
</Window> 

這裏從代碼測試風格背後

using System.Collections.ObjectModel; 
using System.Windows; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 

    { 
     public ObservableCollection<string> observableCollection = new ObservableCollection<string>(); 
     public MainWindow() 
     { 
      for (int i = 0; i < 10; i++) 
      { 
       observableCollection.Add("item:"+ i.ToString()); 
      } 
      InitializeComponent(); 
      comboBox1.ItemsSource = observableCollection; 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 

     } 
    } 
} 
+0

您花時間寫作清晰的例子+1。 –

0

這是可能的,但因爲你已經注意到了,默認的文字和文字的形式顯示選擇的項目是一樣的文本。這就是爲什麼將默認文本的樣式設置爲與所選項目的文本樣式不同的原因。最簡單的實現是聽取ComboBox's選擇更改的事件。當選擇一個項目時,將ComboBox's FontStyle更改爲正常,並且當未選擇項目時將其更改爲斜體

<ComboBox x:Name="ColumnComboBox" SelectionChanged="ColumnComboBox_SelectionChanged" IsEditable="True" Text="Default Text" FontWeight="Italic"> 
    <ComboBoxItem Content="Item 1" FontStyle="Normal"/> 
</ComboBox> 

private void ColumnComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ColumnComboBox.FontStyle = ColumnComboBox.SelectedItem != null ? FontStyles.Normal : FontStyles.Italic; 
} 

或者,您可能實際上需要ComboBox的水印行爲。檢查blog post體面實施帶水印的組合框,可下載的源代碼可用here

+0

是的,這是我之後的水印效果,如該頁面的前兩個圖像所示。我想我只是不知道它的技術術語。該博客文章提供了文本框而不是組合框的示例,因此我想我必須查看源代碼。 –

+0

仔細看看,博客文章的標題和圖片。作者爲TextBox和ComboBox實現了水印:) – har07

+1

是的,我只是想說,實際博客文章中的示例是針對文本框實現的,據我所知,源代碼將具有用於組合框的實現。 –