[英]Can I disable the first item a WPF combobox within xaml code?
考慮以下組合框:
<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>
組合框的第一個 Item 是默認預設,在文本框中具有相應的默認名稱。 因此,用戶不應該能夠對第一個項目進行輸入 - 因此我想禁用第一個項目的文本框。
我知道我可以在包含類或視圖模型的構造函數中運行一個函數,它禁用第一個索引上的文本框,但是我想知道這是否可以直接在 xaml 代碼中實現(我會發現它更優雅)做這種靜態事情的方式)。
您可以利用PreviousData RelativeSource 將為集合的第一個元素返回null
的事實。 知道您可以將DataTrigger添加到您的 DataTemplate 以將TextBox
的IsEnabled
屬性設置為 false。
這是帶有PreviousData
綁定的ItemTemplate
的簡化版本:
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBox x:Name="TextBox" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=PreviousData}}"
Value="{x:Null}">
<Setter TargetName="TextBox" Property="IsEnabled" Value="False" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
我已經為ListView
創建了一個帶有DataBinding
的復合集合,但邏輯是相同的:
<ListView SelectedValue="{Binding youVMPropertyHere}">
<ListView.ItemsSource>
<CompositeCollection>
<ListViewItem IsHitTestVisible="False">Default Item</ListViewItem>
<CollectionContainer Collection="{Binding Source={StaticResource cvsPresetLists}}"/>
</CompositeCollection>
</ListView.ItemsSource>
<!-- Where-->
<Window.Resources>
<CollectionViewSource Source="{Binding Presets.VolumePresetList}" x:Key="cvsPresetLists"/>
</Window.Resources>
這樣你就可以讓第一個項目不可選。 我也會使用SelectedValue
而不是SelectedIndex
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.