我有一个wpf应用程序,c#在组合框关闭时显示文本(teahcer的名字)。基本上它包含在1个字符串中,并传递给classInstance.TeachersComboBoxText
或Text="{Binding Path=TeachersComboBoxText}"
。一切都很好,但如果教师被标记为非默认或中学教师,则客户要求文本以斜体显示。基本上,我需要一个字符串,但应用了不同的字体样式,取决于我的数据。
<ComboBox Name="instanceTeachersComboBox"
IsEditable="True"
IsReadOnly="True"
ItemsSource="{Binding Path=TeacherList}" DropDownClosed="teachersComboBox_DropDownClosed"
Text="{Binding Path=TeachersComboBoxText}"
FontWeight="{Binding Path=IsSelectedFontWeight}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=IsSelected}"
Background="{Binding Path=IsActiveColour}"
Content="{Binding Path=Display}"
Foreground="{Binding Path=IsClashColour}"
FontStyle="{Binding Path=EndDateFontStyle}"/>
<Image Source="/SchoolEdgeTimetable;component/Images/greentick16x16.png"
Margin="5,0,0,0"
Visibility="{Binding Path=IsSpecialitySubjectVisibility}"></Image>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
===这是代码====
if (classInstance.TeacherList.Any(c => c.IsSelected == true && c.IsDefault == false) || instanceCount != defaultCount)
{
System.Windows.Forms.RichTextBox rtf = new System.Windows.Forms.RichTextBox();
foreach (var item in data)
{
if (!item.IsDefault)
{
rtf.SelectionFont = new Font("Arial", 12, System.Drawing.FontStyle.Italic);
rtf.AppendText(item.Display);
}
text = GT.Join2Strings(text, item.IsDefault? item.Display : rtf.Text, "\n");
}
}
else
text = DEFAULT_TEXT;
classInstance.TeachersComboBoxText = text;
我试过rtf,因为我似乎无法在普通字符串中应用它,但代码无效。有没有办法解决这个问题而不使用rtf?或者如果不是为什么我的代码不起作用?任何人建议一个更好的方法来做到这一点将不胜感激。感谢
更新: 人们建议修改我已经做过的模板,这在组合框打开时显示项目非常有用。我的一个项目是RED和斜体,因为你可以看到但是我想要做的是修改组合框TEXT属性的显示。我附上了一张图片,以便更好地了解我的意思。 谢谢
答案 0 :(得分:0)
如果您知道如何在后面的代码中使用TextBlock控件的<Run>
标记,那将非常简单。见下面的代码:
//loop through all the teachers
foreach (var teacher in vm.Teachers)
{
//check if teacher is default
if (teacher.IsDefault)
{
//add text to "tb" textblock, in italic style
tb.Inlines.Add(new Run(teacher.Name) { FontStyle = FontStyles.Italic });
}
else
{
//add text to "tb" textblock
tb.Inlines.Add(new Run(teacher.Name));
}
}
如果您希望了解有关内联格式的更多信息,here是一篇很酷的博客文章。如果您需要更多帮助,请告诉我。
答案 1 :(得分:0)
您可以处理Loaded
中CheckBox
的{{1}}事件,并将其ItemTemplate
属性设置为Content
个TextBlock
元素,例如:
Inline
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=IsSelected}"
Background="{Binding Path=IsActiveColour}"
Foreground="{Binding Path=IsClashColour}"
FontStyle="{Binding Path=EndDateFontStyle}"
Loaded="CheckBox_Loaded">
</CheckBox>
<Image Source="/SchoolEdgeTimetable;component/Images/greentick16x16.png"
Margin="5,0,0,0"
Visibility="{Binding Path=IsSpecialitySubjectVisibility}"></Image>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
答案 2 :(得分:-1)
添加一个将字体更改为斜体的数据触发器:
<DataTrigger Binding="{Binding IsDefault}" Value="1">
<Setter Property="FontStyle" Value="Italic"/>
</DataTrigger>