我是WPF的新手所以请耐心等待。我的WPF窗口上有一个ComboBox,ItemSource属性绑定到一个字符串List属性(Countries),SelectedItem绑定到一个字符串属性(SelectedCountry)。这两个属性都在后面的代码中 - 我将DataContext设置为“this”(即Window)。
ComboBox xaml是:
<ComboBox Name="CountryComboBox"
VerticalAlignment="Center"
Width="200"
ItemsSource="{Binding Path=Countries, Mode=OneTime}"
SelectedItem="{Binding Path=SelectedCountry, Mode=TwoWay}">
</ComboBox>
我希望在未选择项目时显示默认的“ - 请选择 - ”选项,因此我将以下xaml放在App.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属性时,当我希望它返回到“ - 请选择时,组合框仍然具有相同的选定国家/地区” - ”。我做错了什么?
感谢。
答案 0 :(得分:4)
当ComboBox
为空时,最好不要修改TextBlock
并简单地将ComboBox
覆盖在SelectedItem
上。
将ComboBox
和TextBlock
包裹在Grid
中,并在DataTrigger
上设置TextBlock
以检查SelectedItem
是否为Visibility
null并切换其 <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>
示例:
{{1}}
结果:
答案 1 :(得分:1)
您需要在“国家/地区”列表中插入一条值为null且名称为“ - 请选择 - ”的记录。
或者我认为您可以扩展ComboBox控件并编写自己的控件,以便您可以在列表中指定空值,而无需将记录放入“国家/地区”选项中。
但在这两者中,只是向国家添加记录要容易得多。