我Style
中的Window.Resources
已应用于应用中的所有ComboBox
。但是,我遇到的情况是我需要Window.Resources
中应用于ComboBox
的样式,但我需要禁用我在样式中专门设置的一个功能。
我希望能够在应用程序中的一个ComboBox
中输入文本。
由于ComboBox
文本可编辑部分实际上是TextBox
我设置完全禁用了TextBox
:此样式专门针对我拥有的ComboBox
样式,
<Style x:Key="ComboBoxTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="IsEnabled" Value="False" />
<....More setters etc
我还将ComboBox
个样式IsEditable
设置为false。我必须将此样式应用于TextBox
ComboBox
部分的样式才能正常工作。我还将指向静态资源的代码包含在上面显示的x:Key="ComboBoxTextBoxStyle"
中:
<Style TargetType="{x:Type ComboBox}">
<Setter Property="IsEditable" Value="False" />
<...More setter's
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<TextBox Style="{StaticResource ComboBoxTextBoxStyle}"
<...More styles applied here
所以现在我有一个ComboBox
我希望能够输入文本,所以我将XAML设置为此,
<ComboBox x:Name="Cmb" IsEditable="True"
ItemsSource="{Binding Source={x:Static viewModels:ShiftManagerViewModel.MyBindingList}}"
SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, Path=MySeletcProperty}" />
但即使我已将ComboBox
设置为ComboBox
,IsEditable="True"
也无法输入文字。
ComboBox
输入文本?答案 0 :(得分:1)
你必须创建一个新的Style,它将继承已存在的Style并将其应用于该特定的combox框,样式如下:
更好的方法是,ComboBox IsEnabled
属性的样式模板中的TextBox元素应该绑定到ComboBox IsEditable
属性:
<Style x:Key="ComboBoxTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="IsEnabled"
Value="{Binding Path=IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" />
然后在xaml消费方面你可以指定这种风格:
<ComboBox x:Name="Cmb" IsEditable="True"
ItemsSource="{Binding Source={x:Static viewModels:ShiftManagerViewModel.MyBindingList}}"
SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, Path=MySeletcProperty}" />