将标签添加到WPF ComboBox控件的简便方法

Vac*_*ano 3 .net c# wpf custom-controls

此代码在我的应用程序中变得越来越常见:

<StackPanel Orientation="Vertical">
    <Label Content="_ComboBox Caption" 
           Target="comboBox" 
           Margin="0" 
           Padding="5,5,5,1" />

    <ComboBox  x:Name="comboBox"
                Width="72"
                Margin="5,0,5,5"
                Padding="5,1,5,5"
                SelectedItem="{Binding ComboSelectedItem}"
                ItemsSource="{Binding ComboSourceList}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

它呈现给我一个Captioned ComboBox.

我想让我成为一个自定义控件,它是一个ComboBox,用于公开Label的内容,然后设置其他属性.可以像这样使用的东西:

<Controls:CaptionedComboBox  x:Name="comboBox"
                             Width="72"
                             LabelContent="_ComboBox Caption"
                             SelectedItem="{Binding ComboSelectedItem}"
                             ItemsSource="{Binding ComboSourceList}" />
Run Code Online (Sandbox Code Playgroud)

但是,我研究了制作自定义控件,并且需要一些令人畏惧的造型.

有没有办法把我上面的东西拿走,最后做这样的事情?

<StackPanel Orientation="Vertical">
    <Label Content="{Binding TemplateLabelContent}" 
           Target="{Binding ControlName}" 
           Margin="0" 
           Padding="5,5,5,1" />

    <InheritedComboBoxStuff/>

</StackPanel>
Run Code Online (Sandbox Code Playgroud)

我知道那是行不通的.但我的观点是,我不得不重新设计整个ComboBox的样式,只是为了在它上面添加一个标签,这似乎很愚蠢.

Seb*_*mel 6

你可以为它制作一个模板

  <ControlTemplate x:Key="ComboWithHeader" TargetType="ContentControl">
        <StackPanel Orientation="Vertical">
            <Label Margin="0"
                   Content="{Binding ComboBoxHeader}"
                   DataContext="{TemplateBinding DataContext}"
                   Padding="5,5,5,1"
                   Target="comboBox" />

            <ComboBox x:Name="comboBox"
                      Width="72"
                      Margin="5,0,5,5"
                      DataContext="{TemplateBinding DataContext}"
                      ItemsSource="{Binding ComboSourceList}"
                      Padding="5,1,5,5"
                      SelectedItem="{Binding ComboSelectedItem}" />
        </StackPanel>
    </ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

然后,只要你想使用标题组合,只需使用

<ContentControl Template="{StaticResource ComboWithHeader}" DataContext="{Binding ComboBoxViewModel}" />
Run Code Online (Sandbox Code Playgroud)