2

我是 WPF 的新手,所以请多多包涵。我的 WPF 窗口上有一个 ComboBox,ItemSource 属性绑定到字符串列表属性(Countries),SelectedItem 绑定到字符串属性(SelectedCountry)。这两个属性都在后面的代码中 - 我将 DataContext 设置为“this”(即 Window)。

组合框 xaml 是:

<ComboBox Name="CountryComboBox" 
    VerticalAlignment="Center" 
    Width="200"
    ItemsSource="{Binding Path=Countries, Mode=OneTime}"
    SelectedItem="{Binding Path=SelectedCountry, Mode=TwoWay}">
</ComboBox>

我希望在未选择项目时显示默认的“- Please Select -”选项,因此我在 App.xaml 中放置了以下 xaml:

<Style TargetType="ComboBox">
    <Style.Triggers>
        <Trigger Property="SelectedItem" Value="{x:Null}">
            <Setter Property="IsEditable" Value="true" />
            <Setter Property="IsReadOnly" Value="true" />
            <Setter Property="Text" Value="- Please Select -" />
        </Trigger>
    </Style.Triggers>
</Style>

当我的窗口首次显示时,组合框确实具有预期的“-请选择-”文本。然后当我在组合框中选择一个值时,SelectedCountry 会被适当地填充,但是当我将“null”分配给 SelectedCountry 属性时,组合框仍然具有相同的选定国家/地区,而我希望它返回“-请选择——”。我究竟做错了什么?

谢谢。

4

2 回答 2

4

当 a为空时,不修改ComboBox并简单地将 a 覆盖在 aTextBlock上可能是一个更好的选择。ComboBoxSelectedItem

ComboBox只需将and a包装在a 中并TextBlock在a上Grid设置 a以检查是否为 null 并切换其DataTriggerTextBlockSelectedItemVisibility

例子:

    <Grid> 
        <ComboBox x:Name="combo" ItemsSource="{Binding Countries}" SelectedItem="{Binding SelectedItem}" />
        <TextBlock x:Name="textblock" Text="- Please Select -" Margin="5,3,0,0" IsHitTestVisible="False">
            <TextBlock.Style>
             <Style TargetType="TextBlock">
                    <Setter Property="Visibility" Value="Hidden" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding SelectedItem,ElementName=combo}" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Visible" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </Grid>

结果:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2013-03-15T23:08:24.090 回答
1

您需要在 Country 列表中插入一条记录,其值为 null 且名称为“- Please Select -”。

或者,我想您可以扩展 ComboBox 控件并编写自己的控件,这样您就可以在列表中指定空值,而不必将记录放入国家选择中。

但是在这两者中,向国家添加记录要容易得多。

于 2013-03-15T18:17:04.153 回答