簡體   English   中英

我可以在 xaml 代碼中禁用 WPF 組合框的第一項嗎?

[英]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 以將TextBoxIsEnabled屬性設置為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM