WPF의 페이지로드시 콤보 상자에 기본 텍스트 "--Select Team-"을 표시하는 방법은 무엇입니까?


109

WPF 앱의 MVP 앱에는 데이터베이스에서 가져온 데이터를 표시하는 콤보 상자가 있습니다. 콤보 상자에 항목을 추가하기 전에 다음과 같은 기본 텍스트를 표시하고 싶습니다.

"-팀 선택-"

페이지로드시 표시되고 선택시 텍스트가 지워지고 항목이 표시되도록합니다.

DB에서 데이터를 선택하고 있습니다. 사용자가 콤보 상자에서 항목을 선택할 때까지 기본 텍스트를 표시해야합니다.

나를 안내 해주세요

답변:


107

이 작업을 수행하는 가장 쉬운 방법은 다음과 같습니다.

<ComboBox Name="MyComboBox"
 IsEditable="True"
 IsReadOnly="True"
 Text="-- Select Team --" />

분명히 다른 옵션을 추가해야하지만 이것이 아마도 가장 간단한 방법 일 것입니다.

그러나이 방법에는 한 가지 단점이 있습니다. 콤보 상자 내부의 텍스트는 편집 할 수 없지만 여전히 선택할 수 있다는 것입니다. 그러나 지금까지 찾은 모든 대안의 품질과 복잡성이 낮기 때문에 이것이 아마도 최고의 옵션 일 것입니다.


훌륭한 대답 Chris! Focusable = "True"만 추가 할 것이지만 이는 외관상의 변화 일뿐입니다.
Slavisa

6
완벽한 대답 Chris. 하나의 속성이 큰 차이를 만들 수 있습니다. : D
Aster Veigas 2013 년

4
Focusable="False" IsEditable="True" IsReadOnly="True"
Kamil Lelonek

1
+1. 불행하게도 혼합 항목 (예 : 콤보 상자 항목이 이미지 인 경우)에서는 작동하지 않습니다.
greenoldman 2014

11
간단하고 작동하는 솔루션. WPF 컨트롤은 프레임 워크 전체에 이러한 종류의 문제가 있습니다. 여기저기서 컨트롤에는 대부분의 개발자에게 필요한 기능이 없습니다. 결과적으로 개발자는 솔루션을 검색하거나 타사 대체 컨트롤을 구입하거나 해결 방법을 구현하는 데 시간을 낭비합니다. WPF 팀은 자신의 컨트롤을 자체 개발에 사용합니까?
Damn Vegetables

90

.NET Framework를 사용하여 코드 뒤에 코드없이이 작업을 수행 할 수 있습니다 IValueConverter.

<Grid>
   <ComboBox
       x:Name="comboBox1"
       ItemsSource="{Binding MyItemSource}"  />
   <TextBlock
       Visibility="{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}"
       IsHitTestVisible="False"
       Text="... Select Team ..." />
</Grid>

여기에 다시 사용할 수있는 변환기 클래스가 있습니다.

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
}

마지막으로 리소스 섹션에서 변환기를 선언해야합니다.

<Converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />

Converters는 변환기 클래스를 배치 한 위치입니다. 예 :

xmlns:Converters="clr-namespace:MyProject.Resources.Converters"

이 접근 방식의 가장 좋은 점은 코드 뒤에서 코드를 반복하지 않는다는 것입니다.


이것을 사용하고 싶지만 콤보 상자가 datagrid의 헤더 인 경우에는 허용되지 않는 것 같습니다. . . XAML은 헤더가 이미 정의되어 있다는 오류를 표시합니다 (또는 두 번 이상 정의 할 수 없음). 어떤 아이디어? 나는 null 값 옵션을 사용하려고 생각하고 있는데, 그것을 선택하여 재설정을 허용하지만 약간 엉성해 보입니다.
Paul Gibson

1
이것이 뛰어난 솔루션 인 큰 이유는 거의 모든 데이터 바인딩 된 WPF 프로젝트가 NullToVisibilityConverter를 사용하므로 대부분의 시간에 이미 존재하므로이를 활용하는 것이 좋습니다!
tpartee 2015-06-16

2
실제로 DataTrigger여기에서 변환기 코드조차 피하기 위해 a 를 사용할 수 있습니다. :)
Billy ONeal 2015 년

49

나는 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>

33

아무도 순수한 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>

5
"Visibility ="Hidden "을 데이터 트리거로 이동해야했는데 예상대로 작동했습니다. 확실히 제가 본 것 중 가장 강력한 접근 방식입니다. 재사용 성을 위해 스타일을 리소스로 옮겼습니다
Mitch

@Mitch IceForce의 답변이 저에게 효과가 없습니다. 작동하도록 변경 한 사항은 무엇입니까?
Chris

1
@Chris 나는 그가 <Setter Property="Visibility" Value="Hidden"/>방아쇠 외부 (스타일 내부)를 추가 Visibility="Hidden"하고 실제 텍스트 블록 요소에서 제거하는 것을 의미한다고 생각한다
Reinstate Monica Please

@Mitch, DataTrigger의 ElementName이 특정 개체 (mybox)를 가리키는 경우 재사용을 위해 Textblock 스타일을 리소스로 어떻게 이동합니까? 해당 이름을 일반적인 방식으로 지정하는 방법이 있습니까?
CrApHeR 2015


16

직접 지원되는지는 모르겠지만 콤보를 레이블로 오버레이하고 선택이 null이 아닌 경우 숨김으로 설정할 수 있습니다.

예.

<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>

그런 다음 선택 변경 처리기에서 ...

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    txtSelectTeam.Visibility = comboBox1.SelectedItem == null ? Visibility.Visible : Visibility.Hidden;
}

1
SelectionChanged 처리기를 만드는 대신 XAML에서 TextBlock의 가시성을 설정할 수 있습니다.
aliceraunsbaek jul.

6

를 기반으로 IceForge의 대답 나는 재사용 가능한 솔루션을 준비 :

xaml 스타일 :

<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>

사용 예 :

<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>

좋은. 이름을 설정할 필요가 없도록 상대 소스를 사용하여 TextBlock의 DataContext를 바인딩하여 확장했습니다. Markup에 대한 다음 주석을 참조하십시오 (SO의 주석에있는 코드가보기
흉해

<TextBlock DataContext = "{Binding Path = Children [0] .SelectedItem, RelativeSource = {RelativeSource AncestorType = Grid}}"Text = "-프로젝트 선택-"Style = "{StaticResource ComboBoxSelectOverlay}"/>
Sascha

4

콤보 상자로 시도하지 않았지만 이것은 다른 컨트롤로 나를 위해 일했습니다 ...

ageektrapped 블로그 포스트

여기에서 표시기 레이어를 사용하여 워터 마크를 표시합니다.


이 코드를 다운로드하고 시도했습니다. 광고 된대로 작동하는 것 같습니다. 워터 마크가 포함 된 간단한 연결된 속성으로 콤보를 장식 할 수 있습니다. 다른 컨트롤에서도 작동합니다. 이 질문에 대한 다른 답변보다 훨씬 더 나은 접근 방식입니다.
Ian Oakes 2011-08-26

좋은 물건, ComboBox 문제를 해결할뿐만 아니라 이제 WPF Tools 어셈블리를 제거하고 WatermarkedTextBox 컨트롤 대신 TextBoxes에서도 사용할 수 있으므로 승리로 가득 차 있습니다. :)-오 btw 그것은 A Geek Trapped입니다. 동의 함 함정!
dain

2

HappyNomad의 솔루션은 매우 좋았고 결국 약간 다른 솔루션에 도달하는 데 도움이되었습니다.

<ComboBox x:Name="ComboBoxUploadProject" 
    Grid.Row="2"
    Width="200" 
    Height="23"                           
    Margin="64,0,0,0"
    ItemsSource="{Binding projectList}"
    SelectedValue ="{Binding projectSelect}" 
    DisplayMemberPath="projectName"
    SelectedValuePath="projectId"
    >
    <ComboBox.Template>
        <ControlTemplate TargetType="ComboBox">
            <Grid>
                <ComboBox x:Name="cb" 
                    DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" 
                    ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}}"
                    SelectedValue ="{Binding SelectedValue, RelativeSource={RelativeSource TemplatedParent}}" 
                    DisplayMemberPath="projectName"
                    SelectedValuePath="projectId"
                    />
                <TextBlock x:Name="tb" Text="Select Item..." Margin="3,3,0,0" IsHitTestVisible="False" Visibility="Hidden"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger SourceName="cb" Property="SelectedItem" Value="{x:Null}">
                    <Setter TargetName="tb" Property="Visibility" Value="Visible"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ComboBox.Template>
</ComboBox>

2

가장 쉬운 방법은 CompositeCollection을 사용하여 ComboBox에서 직접 데이터베이스의 기본 텍스트와 데이터를 병합하는 것입니다.

    <ComboBox x:Name="SelectTeamComboBox" SelectedIndex="0">
        <ComboBox.ItemsSource>
            <CompositeCollection>
                <ComboBoxItem Visibility="Collapsed">-- Select Team --</ComboBoxItem>
                <CollectionContainer Collection="{Binding Source={StaticResource ResourceKey=MyComboOptions}}"/>
            </CompositeCollection>
        </ComboBox.ItemsSource>
    </ComboBox>

그리고 Resources에서 StaticResource를 정의하여 CollectionContainer의 직접 바인딩이 올바르게 작동하지 않기 때문에 ComboBox 옵션을 DataContext에 바인딩합니다.

<Window.Resources>
    <CollectionViewSource Source="{Binding}" x:Key="MyComboOptions" />
</Window.Resources>

이렇게하면 xaml에서만 ComboBox 옵션을 정의 할 수 있습니다.

   <ComboBox x:Name="SelectTeamComboBox" SelectedIndex="0">
        <ComboBox.ItemsSource>
            <CompositeCollection>
                <ComboBoxItem Visibility="Collapsed">-- Select Team --</ComboBoxItem>
                <ComboBoxItem >Option 1</ComboBoxItem>
                <ComboBoxItem >Option 2</ComboBoxItem>
            </CompositeCollection>
        </ComboBox.ItemsSource>
    </ComboBox>

1

다음을 권장합니다.

행동 정의

public static class ComboBoxBehaviors
{
    public static readonly DependencyProperty DefaultTextProperty =
        DependencyProperty.RegisterAttached("DefaultText", typeof(String), typeof(ComboBox), new PropertyMetadata(null));

    public static String GetDefaultText(DependencyObject obj)
    {
        return (String)obj.GetValue(DefaultTextProperty);
    }

    public static void SetDefaultText(DependencyObject obj, String value)
    {
        var combo = (ComboBox)obj;

        RefreshDefaultText(combo, value);

        combo.SelectionChanged += (sender, _) => RefreshDefaultText((ComboBox)sender, GetDefaultText((ComboBox)sender));

        obj.SetValue(DefaultTextProperty, value);
    }

    static void RefreshDefaultText(ComboBox combo, string text)
    {
        // if item is selected and DefaultText is set
        if (combo.SelectedIndex == -1 && !String.IsNullOrEmpty(text))
        {
            // Show DefaultText
            var visual = new TextBlock()
            {
                FontStyle = FontStyles.Italic,
                Text = text,
                Foreground = Brushes.Gray
            };

            combo.Background = new VisualBrush(visual)
            {
                Stretch = Stretch.None,
                AlignmentX = AlignmentX.Left,
                AlignmentY = AlignmentY.Center,
                Transform = new TranslateTransform(3, 0)
            };
        }
        else
        {
            // Hide DefaultText
            combo.Background = null;
        }
    }
}

사용자 행동

<ComboBox Name="cmb" Margin="72,121,0,0" VerticalAlignment="Top"
          local:ComboBoxBehaviors.DefaultText="-- Select Team --"/>

이것은 단일 콤보 상자의 매력처럼 작동합니다. 그러나 하나 이상의 콤보와 함께 사용하면 " 'ComboBox'에 의해 이미 등록 된 ''DefaultText 'Property'"라는 오류가 발생합니다 (하지만 잘 컴파일되고 실행 됨). 내 블로그에서 수정 사항을 언급했습니다.
Romesh D. Niriella 2014

지적 해 주셔서 감사합니다. 내 컴퓨터에서이 오류를 생성 할 수 없습니다. 그러나 typeof (ComboBoxBehaviors)가 typeof (ComboBox) 대신 RegisterAttached의 세 번째 매개 변수에 전달되어야한다는 데 동의합니다.
Usman Zafar

이 게시물은 조금 오래되었지만 어떻게 작동하는지 모르겠습니다. 콤보의 bg는 여러 조건이있는 트리거를 통해 설정됩니다. 그리드에 콤보 만 놓고 수동으로 bg를 '빨간색'으로 설정해보세요. 워터 마크를 표시하려는 영역에는 영향을주지 않습니다. 드롭 다운 패널 뒤에있는 bg에만 영향을 미칠 수 있습니다. 더 나은 해결책은 콤보 박스의 컨트롤 템플릿을 복사하고 몇 가지 트리거와 스타일을 추가하여 텍스트 블록으로 구성된 시각적 브러시를 테두리의 배경에 칠하는 것입니다.
Newclique 2016-10-13

1

IceForge의 답변 은 매우 가깝고 AFAIK가이 문제에 대한 가장 쉬운 해결책입니다. 그러나 작동하지 않아서 무언가를 놓쳤습니다 (적어도 저에게는 실제로 텍스트를 표시하지 않습니다).

결국 콤보 상자의 선택한 항목이 null이 아닐 때 숨겨 지도록 TextBlock의 "Visibility"속성을 "Hidden"으로 설정할 수 없습니다. 기본적으로 그렇게 설정해야합니다 ( 트리거에서 null이 아닌지 확인할 수 없기 때문에 와 동일한 위치에서 XAML의 Setter를 사용하여 에서 .

다음은 트리거 바로 앞에 놓인 누락 된 Setter를 기반으로 한 실제 솔루션입니다.

<ComboBox x:Name="combo"/>
<TextBlock Text="--Select Team--" IsHitTestVisible="False">
    <TextBlock.Style>
        <Style TargetType="TextBlock">

            <Style.Setters>
                <Setter Property="Visibility" Value="Hidden"/>
            </Style.Setters>

            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=combo,Path=SelectedItem}" Value="{x:Null}">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

1

편집 : 아래 의견에 따라 이것은 해결책이 아닙니다. 내가 어떻게 작동했는지 확실하지 않으며 해당 프로젝트를 확인할 수 없습니다.

최신 XAML에 대한이 답변을 업데이트 할 때입니다.

이 질문에 대한 해결책을 찾기 위해이 질문을 찾은 다음 업데이트 된 XAML 사양에 간단한 해결책이 있음을 발견했습니다.

이제 "Placeholder"라는 속성을 사용하여이 작업을 수행 할 수 있습니다. 다음과 같이 간단합니다 (Visual Studio 2015).

<ComboBox x:Name="Selection" PlaceholderText="Select...">
    <x:String>Item 1</x:String>
    <x:String>Item 2</x:String>
    <x:String>Item 3</x:String>
</ComboBox>

이 솔루션을 사용했습니다. 반대 투표자가 자세히 설명하는 데 관심이 있습니까? 나는 XAML 전문가는 아니지만 작동했습니다.
Robb Sadler

1
나는 투표자가 아니지만 PlaceholderText, System.Windows.ComboBox클래스에 재산 이 없기 때문에 투표를 받았다고 생각합니다 . 이것은 WinForms가 아니라 WPF에 대한 질문입니다.
Sheridan

이건 이상해-내가 XAML 앱을 작업하고 있다는 것을 알고 있으며 방금 이것을 발견하고 작동하는 것을 알고 있습니다. 프로젝트에 확장이 포함되었을 수 있습니까? IDK-나는 그 이후로 ComboBox에 자리 표시자가 없다는 것을 확인했습니다. 작업하던 프로젝트로 돌아갈 수 없습니다. 이전 클라이언트입니다. 으.
Robb Sadler

2
당신이 틀린 것은 아니지만 그것은 WPF를위한 것이 아닙니다. UWP ComboBox에는이 페이지가 있습니다. msdn.microsoft.com/en-us/library/windows/apps/…
laishiekai

0

모범 사례는 아니지만 잘 작동합니다 ...

<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

이 게시물에서 언급 한 워터 마크 가이 경우에 잘 작동 할 것이라고 생각합니다.

약간의 코드가 필요하지만 모든 콤보 상자 또는 텍스트 상자 (심지어 암호 상자)에 다시 사용할 수 있으므로이 방법을 선호합니다.


0

내 프로젝트에서 IsNullConverter 클래스를 사용하고 있는데 저에게 효과적이었습니다. 여기에 C #의 코드가 있습니다. Converter라는 폴더를 만들고 해당 폴더에이 클래스를 추가합니다. 사용 된 트리거가 null이 아닌 값을 지원하지 않으므로 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>

0

// XAML 코드

// ViewModel 코드

    private CategoryModel _SelectedCategory;
    public CategoryModel SelectedCategory
    {
        get { return _SelectedCategory; }
        set
        {
            _SelectedCategory = value;
            OnPropertyChanged("SelectedCategory");
        }
    }

    private ObservableCollection<CategoryModel> _Categories;
    public ObservableCollection<CategoryModel> Categories
    {
        get { return _Categories; }
        set
        {
            _Categories = value;
            _Categories.Insert(0, new CategoryModel()
            {
                CategoryId = 0,
                CategoryName = " -- Select Category -- "
            });
            SelectedCategory = _Categories[0];
            OnPropertyChanged("Categories");

        }
    }

0

조금 늦었지만 ..

더 간단한 방법은 IsDummy = true 매개 변수를 사용하여 더미 데이터 항목을 목록에 추가하고 HitTestVisable이 아니고 높이가 1 픽셀 (변환기를 사용하여)인지 확인하여 표시되지 않도록하는 것입니다.

SelectionChanged에 등록하고 그 안에 인덱스를 더미 항목 인덱스로 설정하십시오.

매력처럼 작동하며 ComboBox 또는 응용 프로그램 테마의 스타일과 색상을 엉망으로 만들지 않습니다.


0
InitializeComponent()
yourcombobox.text=" -- Select Team --";

위의 코드는이를 달성하는 가장 간단한 방법을 보여줍니다. 창로드 후 콤보 상자의 .Text 속성을 사용하여 콤보 상자의 텍스트를 선언합니다. 이것은 DatePicker, Textbox 및 기타 컨트롤로 확장 될 수 있습니다.


0

다음과 같이 코드 숨김에서 데이터베이스의 데이터로 콤보 상자를 바인딩하기 전에 수행했습니다.

Combobox.Items.Add("-- Select Team --");
Combobox.SelectedIndex = 0;

1
드롭 다운에 텍스트가 옵션으로 추가됩니다. 그것은 OP가 요구 한 것이 아닙니다.
Dean Friedland

그것은 기본 텍스트를 추가하는 방법에 대한 있고 난이 방법으로 그것을했다
Atiq Baqi

0
  1. 콤보 박스 위에 라벨을 붙입니다.

  2. 레이블의 내용을 콤보 상자 Text 속성에 바인딩합니다.

  3. 콤보 박스의 불투명도를 0, Opacity = 0으로 설정합니다.

  4. 콤보 상자 Text 속성에 기본 텍스트 쓰기

          <ComboBox Name="cb"
            Text="--Select Team--" Opacity="0" 
            Height="40" Width="140" >
             <ComboBoxItem Content="Manchester United" />
             <ComboBoxItem Content="Lester" />
         </ComboBox>
     </Grid>

-2

IsEditable 속성 만 true로 설정하십시오.

<ComboBox Name="comboBox1"            
          Text="--Select Team--"
          IsEditable="true"  <---- that's all!
          IsReadOnly="true"/>

-3

나는 이것이 반쯤 된 것을 알고 있지만 이런 식으로 어떨까요?

<DataTemplate x:Key="italComboWM">
    <TextBlock FontSize="11" FontFamily="Segoe UI" FontStyle="Italic" Text="--Select an item--" />
</DataTemplate>

<ComboBox EmptySelectionBoxTemplate="{StaticResource italComboWM}" />

2
ComboBoxEmptySelectionBoxTemplate재산 이 없습니다 .
Novitchi S
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.