【发布时间】:2019-09-15 22:01:14
【问题描述】:
考虑以下组合框:
<ComboBox ItemsSource="{Binding Presets.VolumePresetList}" SelectedIndex="{Binding VolumePresetSelectedIndex, UpdateSourceTrigger=PropertyChanged}" Margin="10, 10" HorizontalAlignment="Left"
MinWidth="150">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding PresetName, UpdateSourceTrigger=Explicit}" VerticalAlignment="Center" Height="20" BorderThickness="0" LostFocus="TextBox_LostFocus" KeyUp="TextBox_KeyUp"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
组合框的第一个项目是默认预设,在文本框中具有相应的默认名称。因此,用户不应该能够对第一项进行输入 - 因此我想禁用第一项的文本框。
我知道我可以在包含类或视图模型的构造函数中运行一个函数,它会禁用第一个索引上的文本框,但是我想知道这是否可以直接在 xaml 代码中(我会找到做这种静态事情的更优雅的方式)。
【问题讨论】:
-
你看过这个stackoverflow问题吗? stackoverflow.com/questions/20889963/…
-
@KevinCook 据我了解,这个问题的答案再次使用数据绑定来处理视图模型中的 IsEnabled 值,对吗?我想知道有一种仅限 xaml 的方法,我可以根据它们的索引禁用项目。
-
您必须将
CompositeColelction指定为 xaml 中的 itemsSource,然后添加ComboBoxItem并将IsHitTestVisible设置为 false。希望这是有道理的?