为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在 xaml 代码中禁用 WPF 组合框的第一项吗?

我可以在 xaml 代码中禁用 WPF 组合框的第一项吗?

C#
胡子哥哥 2022-12-31 14:01:59
考虑以下组合框:<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 代码中实现(我会发现它更优雅做这种静态事情的方式)。
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

您可以利用PreviousData RelativeSource 将为null集合的第一个元素返回这一事实。知道您可以将DataTrigger添加到 DataTemplate 以将其IsEnabled属性设置TextBox为 false。


这是ItemTemplate带有PreviousData绑定的简化版本:


       <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>


查看完整回答
反对 回复 2022-12-31
?
www说

TA贡献1775条经验 获得超8个赞

我用DataBindingfor创建了一个复合集合,ListView但逻辑是一样的:


<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.


查看完整回答
反对 回复 2022-12-31
  • 2 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信