Как отобразить текст по умолчанию «--Select Team -» в поле со списком при загрузке страницы в WPF? - PullRequest
93 голосов
/ 15 сентября 2009

В приложении WPF, в приложении MVP, у меня есть поле со списком, для которого я отображаю данные, извлеченные из базы данных. Прежде чем элементы, добавленные в поле со списком, я хочу отобразить текст по умолчанию, например

"- Выбрать команду -"

так, чтобы при загрузке страницы он отображался и при его выборе текст очищался, а элементы отображались.

Происходит выбор данных из БД. Мне нужно отображать текст по умолчанию, пока пользователь не выберет элемент из поля со списком.

Пожалуйста, ведите меня

Ответы [ 23 ]

0 голосов
/ 15 сентября 2009

Не лучшая практика ... но работает нормально ...

<ComboBox GotFocus="Focused"  x:Name="combobox1" HorizontalAlignment="Left" Margin="8,29,0,0" VerticalAlignment="Top" Width="128" Height="117"/>

Код позади

public partial class MainWindow : Window
{
    bool clearonce = true;
    bool fillonce = true;
    public MainWindow()
    {
        this.InitializeComponent();          
        combobox1.Items.Insert(0, " -- Select Team --");
        combobox1.SelectedIndex = 0;
    }

    private void Focused(object sender, RoutedEventArgs e)
    {
            if(clearonce)
            {
                combobox1.Items.Clear();
                clearonce = false;
            }
            if (fillonce)
            {
              //fill the combobox items here 
                for (int i = 0; i < 10; i++)
                {
                    combobox1.Items.Insert(i, i);
                }
                fillonce = false;
            }           
    }
}
0 голосов
/ 31 октября 2018

Раствор
1. Поместите этикетку на верхнюю часть комбинированного списка.
2. Привязать содержимое метки к свойству поля со списком.
3. Установите непрозрачность комбинированного списка на ноль, непрозрачность = 0.
4. Введите текст по умолчанию в поле со списком.

 <Grid>
        <Label Content="{Binding ElementName=cb, Path=Text}" 
         VerticalContentAlignment="Center"
         HorizontalContentAlignment="Center"
         Height="{Binding ElementName=cb, Path=Height}"
         Width="{Binding ElementName=cb, Path=Width}"/>

         <ComboBox Name="cb"
           Text="--Select Team--" Opacity="0" 
           Height="40" Width="140" >
            <ComboBoxItem Content="Manchester United" />
            <ComboBoxItem Content="Lester" />
        </ComboBox>
    </Grid>
0 голосов
/ 26 марта 2014

Я использую класс IsNullConverter в своем проекте, и он работал для меня. Вот код для этого на C #, создайте папку с именем Converter и добавьте этот класс в эту папку, так как используемый триггер не поддерживает значение вместо нуля, а IsNullConverter просто делает это

 public class IsNullConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value == null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
    }
}

добавить пространство имен в файл xaml следующим образом.

xmlns:Converters="clr-namespace:TymeSheet.Converter"

означает

xmlns:Converters="clr-namespace:YourProjectName.Converter"

используйте эту строку под ресурсами, чтобы сделать ее доступной через код xaml

<Converters:IsNullConverter x:Key="isNullConverter" />

здесь - код xaml, я использовал здесь триггер, чтобы при выборе элемента в поле со списком видимость вашего текста становилась ложной.

<TextBlock Text="Select Project" IsHitTestVisible="False" FontFamily="/TimeSheet;component/Resources/#Open Sans" FontSize="14" Canvas.Right="191" Canvas.Top="22">
                        <TextBlock.Resources>
                            <Converters:IsNullConverter x:Key="isNullConverter"/>
                        </TextBlock.Resources>
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ElementName=ProjectComboBox,Path=SelectedItem,Converter={StaticResource isNullConverter}}" Value="False">
                                        <Setter Property="Visibility" Value="Hidden"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...