【发布时间】:2013-03-13 19:22:59
【问题描述】:
我想将条件格式(只是字体颜色)添加到组合框的文本框部分。根据 MSDN,它是“PART_EditableTextBox”元素。对 SO 的快速搜索让我开始了,但我现在面临一个问题:它覆盖了整个模板。根据this SO answer,我可以使用“BasedOn”来仅覆盖特定属性,但我不知道如何/在哪里使用它。 这是我当前的模板:
<ControlTemplate x:Key="MyComboBoxTextBox" TargetType="ComboBox" <!--Here?--> >
<TextBox x:Name="PART_EditableTextBox" <!--Maybe Here?-->>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="MAL">
<Setter Property="Foreground" Value="DarkOrange"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</ControlTemplate>
它有效,我仍然可以输入有效值,并且“MAL”确实使文本变为橙色,但不再有下拉菜单。 在 MSDN 上,我发现了以下内容:
<TextBox x:Name="PART_EditableTextBox"
Style="{x:Null}"
Template="{StaticResource ComboBoxTextBox}"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="3,3,23,3"
Focusable="True"
Background="Transparent"
Visibility="Hidden"
IsReadOnly="{TemplateBinding IsReadOnly}" />
我想我的模板应该基于这个“ComboBoxTextBox”,但我不知道如何引用它。我真的需要复制整个模板还是有办法覆盖特定属性?
编辑: 在同一个 MSDN 页面上,comboboxTextBox 被定义为
<ControlTemplate x:Key="ComboBoxTextBox"
TargetType="{x:Type TextBox}">
<Border x:Name="PART_ContentHost"
Focusable="False"
Background="{TemplateBinding Background}" />
</ControlTemplate>
我看不到覆盖此模板如何删除下拉列表。
【问题讨论】:
-
在我看来,您的 ControlTemplate 所做的基本上是将您的 ComboxBox 重新模板化为只有一个 TextBox。如果您想查看下拉列表,您需要有该 PART 的控件定义!不幸的是,我在 ReTemplating 方面做得不够好,无法为您提供帮助,但希望这能为您指明正确的方向。