当使控件不可修改时,我们将它们显示为TextBox
以保持一致的风格。问题是ComboBox
可以包含任何类型的数据,因此绑定Text
的{{1}}属性并不像使用ControlTemplate TextBox
那么简单。
SelectedItem
我的想法是使用<Style TargetType="{x:Type ComboBox}">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBox Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}, Path=????, Converter={StaticResource ResourceKey=ComboToTextConverter}, UpdateSourceTrigger=PropertyChanged}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
并发送整个Converter
,以便ComboBox
代码处理它。反正有吗?
欢迎任何其他建议!
答案 0 :(得分:2)
您需要使用SelectedValue
和SelectedValuePath
属性:
<Style TargetType="ComboBox" x:Key="cStyle">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<TextBox Text="{Binding RelativeSource=
{RelativeSource TemplatedParent},
Path=SelectedValue}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
并继承你的ComboBox
<ComboBox Name="cbox" ItemsSource="{Binding}"
Style="{StaticResource cStyle}"
SelectedValuePath="SomeText"
DisplayMemberPath="SomeText" />
现在,当您在IsReadOnly
上将ComboBox
属性设置为true时,它会变为TextBox
,并将所选值作为其文本。