选择组合框时设置文本框的属性 WPF XAML

Posted

技术标签:

【中文标题】选择组合框时设置文本框的属性 WPF XAML【英文标题】:Set properties of text box when combobox selection is made WPF XAML 【发布时间】:2012-05-15 21:46:40 【问题描述】:

如何在制作组合选择时设置文本框的属性。 foe 示例在进行组合框选择时设置文本框的背景和 IsEnabled 属性。我希望它纯粹在 XAML 中,而不是在后面的代码中。我使用 MVVM

【问题讨论】:

这个问题类似于:***.com/questions/2561820/… 【参考方案1】:

您可以为组合的选定对象使用数据触发器。看看这个之前的问题:WPF Visibility of a UI element based on combo selection

当 selecteditem 为 x:Null 时尝试生成触发器。为此,您需要将控件放在 DataTemplate 中,并将触发器放在模板的触发器集合中。

这是一个示例代码(未测试,请自行检查):

<TextBox Height="23" HorizontalAlignment="Left" Margin="246,177,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" IsEnabled" Value="True" /> 

<ComboBox Height="22" HorizontalAlignment="Left" Margin="246,119,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" />

<DataTemplate.Triggers> 
     <Trigger SourceName="comboBox1" Property="ComboBox.SelectedItem" Value="x:Null"> 
         <Setter TargetName="textbox2" Property="TextBox.IsEnabled" Value="False" />
     </Trigger> 
</DataTemplate.Triggers> 

【讨论】:

我们可以这样做吗 看起来你正在采取逆逻辑。为什么不只检查 SelectedItem==null? 我们可以使用 SelectedItem 吗!= null 我不这么认为。触发器将检查正平等。因此,您要做的就是在您的其他控件中为 SelectedItem!=null 的情况设置默认样式。然后为 SelectedItem Value="x:Null" 创建一个简单的触发器 我希望在选择组合框时启用一个文本框,否则它将被禁用。首先,当应用程序运行时,文本框也应该被禁用,并且只有在选择组合框时才应该启用文本框。纯粹在 XAML 中,因为我正在关注 MVVM,我不希望它在后面的代码中。【参考方案2】:

如何仅在 SelectedItems 为 1 时启用 textBox1

<TextBox Height="23" HorizontalAlignment="Left" Margin="246,177,0,0" Name="textBox2" VerticalAlignment="Top" Width="120">
        <TextBox.Style>
            <Style TargetType="x:Type TextBox">
                <Setter Property="IsEnabled" Value="False"></Setter>
                <Style.Triggers>
                    <DataTrigger Binding="Binding ElementName=comboBox1, Path=SelectedIndex" Value="1">
                        <Setter Property="Background" Value="Green"></Setter>
                        <Setter Property="IsEnabled" Value="True"></Setter>
                     </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox> 
    <ComboBox Height="22" HorizontalAlignment="Left" Margin="246,119,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" />

我认为仅使用 XAML 无法达到条件值 =“1”或“3”,即数据触发器中的关系比相等更复杂。

对于这种情况,您需要一个转换器。 这个链接可以帮助你

How to get DataTemplate.DataTrigger to check for greater than or less than?

【讨论】:

如何在数据触发器中有两个或多个条件,或者为属性指定多个值,例如 。我想为 SelectedIndex 指定超过 1 个值

以上是关于选择组合框时设置文本框的属性 WPF XAML的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 WPF 组合框的样式以使其看起来更像以前的版本

在wpf中访问数据网格内的组合框属性

哪个是 MFC C++ 中单选组合框的事件处理程序

DataGrid 数据绑定/更新中的 WPF 组合框不起作用

在使用ItemContainerGenerator进行自定义时,WPF ComboBox在第二次打开之前不会更新项目

ExtJS 4.1.x - 里面有一个组合框的选择器