在WPF应用程序中,在MVP应用程序中,我有一个组合框,我显示从数据库获取的数据.在项目添加到组合框之前,我想显示默认文本,如
" - 选择团队 - "
因此,在页面加载时,它会显示并在选择它时应清除文本并显示项目.
正在从DB中选择数据.我需要显示默认文本,直到用户从组合框中选择一个项目.
请指导我
Chr*_*ter 97
我发现这样做最简单的方法是:
<ComboBox Name="MyComboBox"
IsEditable="True"
IsReadOnly="True"
Text="-- Select Team --" />
Run Code Online (Sandbox Code Playgroud)
您显然需要添加其他选项,但这可能是最简单的方法.
但是这种方法有一个缺点,即组合框内的文本不可编辑,但仍然可以选择.然而,鉴于迄今为止我发现的每种替代品的质量和复杂性都很差,这可能是最好的选择.
Tri*_*ran 87
你可以通过使用a而无需任何代码IValueConverter.
<Grid>
<ComboBox
x:Name="comboBox1"
ItemsSource="{Binding MyItemSource}" />
<TextBlock
Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"
IsHitTestVisible="False"
Text="... Select Team ..." />
</Grid>
Run Code Online (Sandbox Code Playgroud)
在这里,您有可以重复使用的转换器类.
public class NullToVisibilityConverter : IValueConverter
{
#region Implementation of IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == null ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
最后,您需要在资源部分声明转换器.
<Converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />
Run Code Online (Sandbox Code Playgroud)
转换器是放置转换器类的地方.一个例子是:
xmlns:Converters="clr-namespace:MyProject.Resources.Converters"
Run Code Online (Sandbox Code Playgroud)
这种方法非常好用的是不会在代码中重复代码.
Hap*_*mad 47
我喜欢Tri Q的答案,但这些价值转换器很难用.PaulB用事件处理程序做到了,但这也是不必要的.这是一个纯XAML解决方案:
<ContentControl Content="{Binding YourChoices}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Grid>
<ComboBox x:Name="cb" ItemsSource="{Binding}"/>
<TextBlock x:Name="tb" Text="Select Something" IsHitTestVisible="False" Visibility="Hidden"/>
</Grid>
<DataTemplate.Triggers>
<Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
<Setter TargetName="tb" Property="Visibility" Value="Visible"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
Ice*_*rge 31
没有人说纯xaml解决方案必须复杂.这是一个简单的,文本框上有1个数据触发器.保证金和头寸按要求
<Grid>
<ComboBox x:Name="mybox" ItemsSource="{Binding}"/>
<TextBlock Text="Select Something" IsHitTestVisible="False">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=mybox,Path=SelectedItem}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
Run Code Online (Sandbox Code Playgroud)
小智 22
在Combobox元素上设置IsEditable = True.这将显示Combobox的Text属性
Pau*_*ulB 15
我不知道它是否直接支持但你可以用标签覆盖组合,如果选择不为空则将其设置为隐藏.
例如.
<Grid>
<ComboBox Text="Test" Height="23" SelectionChanged="comboBox1_SelectionChanged" Name="comboBox1" VerticalAlignment="Top" ItemsSource="{Binding Source=ABCD}" />
<TextBlock IsHitTestVisible="False" Margin="10,5,0,0" Name="txtSelectTeam" Foreground="Gray" Text="Select Team ..."></TextBlock>
</Grid>
Run Code Online (Sandbox Code Playgroud)
然后在选择更改处理程序...
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
txtSelectTeam.Visibility = comboBox1.SelectedItem == null ? Visibility.Visible : Visibility.Hidden;
}
Run Code Online (Sandbox Code Playgroud)
根据IceForge 的回答,我准备了一个可重用的解决方案:
xml风格:
<Style x:Key="ComboBoxSelectOverlay" TargetType="TextBlock">
<Setter Property="Grid.ZIndex" Value="10"/>
<Setter Property="Foreground" Value="{x:Static SystemColors.GrayTextBrush}"/>
<Setter Property="Margin" Value="6,4,10,0"/>
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="Visibility" Value="Hidden"/>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
使用示例:
<Grid>
<ComboBox x:Name="cmb"
ItemsSource="{Binding Teams}"
SelectedItem="{Binding SelectedTeam}"/>
<TextBlock DataContext="{Binding ElementName=cmb,Path=SelectedItem}"
Text=" -- Select Team --"
Style="{StaticResource ComboBoxSelectOverlay}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144087 次 |
| 最近记录: |