Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改XAML中组合框的默认文本样式_C#_Wpf_Xaml_Combobox - Fatal编程技术网

C# 更改XAML中组合框的默认文本样式

C# 更改XAML中组合框的默认文本样式,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我正在尝试使用XAML创建一个组合框,它是一个下拉列表,框中已经有斜体的默认文本,当您单击下拉列表以展开选项列表时,所有选项都将以普通文本而不是斜体列出。进行选择时,我希望所选选项仍然是正常的,而不是斜体,即使它与默认文本位于同一位置。我是XAML新手,我不知道如何做到这一点,或者这是否可能 现在,我的组合框如下所示,其中显示的默认文本在属性“text”中。基本上,我希望“默认文本”是斜体,但没有其他内容 <ComboBox x:Name="ColumnComboBox" Grid.Col

我正在尝试使用XAML创建一个组合框,它是一个下拉列表,框中已经有斜体的默认文本,当您单击下拉列表以展开选项列表时,所有选项都将以普通文本而不是斜体列出。进行选择时,我希望所选选项仍然是正常的,而不是斜体,即使它与默认文本位于同一位置。我是XAML新手,我不知道如何做到这一点,或者这是否可能

现在,我的组合框如下所示,其中显示的默认文本在属性“text”中。基本上,我希望“默认文本”是斜体,但没有其他内容

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


非常感谢您的帮助。

您需要做更多的工作来实现这一点。
试试这个

<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)
        {

        }
    }
}
使用System.Collections.ObjectModel;
使用System.Windows;
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共ObservableCollection ObservableCollection=新ObservableCollection();
公共主窗口()
{
对于(int i=0;i<10;i++)
{
添加(“项:+i.ToString());
}
初始化组件();
comboBox1.ItemsSource=可观察收集;
}
已加载私有无效窗口(对象发送器、路由目标)
{
}
}
}

这是可能的,但正如您已经注意到的,默认文本和所选项目时显示的文本是相同的文本。这就是为什么要将默认文本的样式设置为与所选项目的文本样式不同会很棘手的原因。最简单的实现是侦听组合框的选择更改事件。选择项目时,将组合框的FontStyle更改为Normal,未选择项目时,将其更改为Italic


private void ColumnComboBox_SelectionChanged(对象发送者,SelectionChangedEventArgs e)
{
ColumnComboBox.FontStyle=ColumnComboBox.SelectedItem!=null?FontStyles.Normal:FontStyles.Italic;
}

或者,您可能真的希望ComboBox具有水印行为。在水印ComboBox的体面实现上选中此项,可下载源代码

+1感谢您花在编写清晰示例上的时间。是的,这是我追求的水印效果,如该页面上的前两幅图像所示。我想我只是不知道它的专业术语。博客文章给出了文本框而不是组合框的例子,所以我想我必须看一下源代码。仔细看,博客文章的标题和图片。作者为TextBox和ComboBox实现了水印:)是的,我只是想说实际博客文章中的示例是针对文本框实现的,但据我所见,源代码将为ComboBox提供一个实现。
<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;
}