Combobox со значением по умолчанию, которое не является выделением - PullRequest
0 голосов
/ 14 сентября 2011

Есть ли способ иметь значение по умолчанию в ComboBox в WPF?Я не хочу, чтобы это значение было чем-то в моем списке.

Есть ли способ присвоить значение индексу -1, тогда оно может сделать его значением по умолчанию.

Как сделатьЯ продолжаю?

Спасибо за вашу помощь

Ответы [ 3 ]

0 голосов
/ 29 августа 2012

Относительно просто добавить функциональность, вы можете наследовать элемент управления.Установка SelectedItem = null изменит selectedIndex и selectedValue так, как вы хотите.

Затем вы также можете получить доступ к свойству Text, чтобы напрямую установить текст по умолчанию для поля со списком.

// sample code snippet
public NewDropDown()
{
    this.SelectionChanged += NewDropDown_SelectionChanged;
    this.Loaded += NewDropDown_Loaded;
}

void NewDropDown_SelectionChanged( object sender, SelectionChangedEventArgs e )
{
    if ( e.AddedItems.Count == 0 && this.SelectedItem == null )
    {
        this.Text = "Please Select..";
    }
}

Устанавливает текст, когда выбранное значение отсутствует.Он не будет отображаться как выбираемый параметр в списке, чтобы обойти это, вы можете либо ввести null в качестве значения в списке (как говорит @DanJ), либо я добавил кнопку в шаблон элемента управления, которая обнуляет комбинированный список.

Хотя я на самом деле не смотрел на это и не вижу события ItemsSourceChanged, это может быть событие в элементе управления, которое позволит вам ввести null в каждое поле со списком, избавляя вас от хлопот в вашемViewModels.

0 голосов
/ 14 ноября 2013

Я решил это для себя, просто изменив шаблон ComboBox.

Шаблон содержит <ContentPresenter x:Name="ContentPresenter" .. >, отображающий строку SelectedItem на кнопке CBox, или ничего, если SelectedIndex равно -1 = ничего не выбрано = значение CBox по умолчанию. Вы можете просто добавить еще один ContentPresenter, с другим именем, содержанием, связанным со свойством CBox «Текст», и видимостью, установленной в «Скрытый». Затем добавьте Trigger, который скроет стандартный Presenter и покажет текст Presenter по умолчанию, если SelectedIndex равно -1.

<ContentPresenter x:Name="ContentPresenter"
    Content="{TemplateBinding SelectionBoxItem}" />

<ContentPresenter x:Name="DefaultTextContentPresenter"
    Content="{TemplateBinding Text}"  
    Visibility="Hidden" />

<ControlTemplate.Triggers>
    <Trigger Property="SelectedIndex" Value="-1">
        <Setter TargetName="ContentPresenter" Property="Visibility" Value="Hidden"/>
        <Setter TargetName="ContentPresenter_DefaultText" Property="Visibility" 
            Value="Visible"/>
    </Trigger>
</ControlTemplate.Triggers>

Затем просто установите значение CBox Text в текст по умолчанию. Конечно, вы можете связать или установить по умолчанию для текста Presenter любое значение или свойство, которое вам нравится.
По моему скромному мнению, это проще, чем создавать подклассы Cbox и добавлять код.
Этот подход применим и во многих других ситуациях.

0 голосов
/ 14 сентября 2011

Вы не можете назначить значения по умолчанию для Выбранных свойств, как сказал djacobson, однако вы всегда можете использовать индекс 0 в качестве значения по умолчанию, а затем добавить остальную часть коллекции.Если это не то, что вы ищете, вы можете изменить значение ComboBox, чтобы оно приняло значение по умолчанию, которое вы хотите установить, и добавить кнопку или CheckBox, чтобы пользователь мог вернуться к ComboBox со значением по умолчанию.

Я думаю, что это самый простой способ сделать это с помощью инструментов, которые в настоящее время доступны в .net на данный момент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...