El cuadro combinado dentro de un control de usuario desaparece cuando se aplica el estilo en wpf

Estoy tratando de aplicar un estilo a un cuadro combinado, pero en lugar de aplicarlo, el cuadro combinado desaparece. Verifique el siguiente código xaml para el control del usuario.

            
                
                    
                        
                            
                                
                            
                        
                    
                
            
         aaa  ... ...

        

Aquí PASCustomComboBox es una clase que hereda del cuadro combinado.

public class PASCustomComboBox : ComboBox
{
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Down || e.Key == Key.Up)
        {
            e.Handled = true;
            return;
        }

        base.OnPreviewKeyDown(e);
    }
}

preguntado el 07 de septiembre de 10 a las 08:09

2 Respuestas

El problema es que está redefiniendo ControlTemplate sin ningún árbol visual en él:

<Style x:Key="comboBoxStyle" TargetType="{x:Type local:PASCustomComboBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:PASCustomComboBox}">
                <ControlTemplate.Triggers>
                    <Trigger Property="local:PASCustomComboBox.IsEnabled" Value="false">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Querrá los disparadores en el estilo en lugar de la plantilla de control:

<Style x:Key="comboBoxStyle" TargetType="{x:Type local:PASCustomComboBox}">
    <Style.Triggers>
        <Trigger Property="local:PASCustomComboBox.IsEnabled" Value="false">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

Respondido el 30 de enero de 17 a las 20:01

No especificas ningún elemento visual en la plantilla de control de tu estilo, solo un disparador. Representará la plantilla vacía iirc.

Mejor edite la colección de disparadores del ComboBox en su estilo para agregar ese disparador y mantendrá la ControlTemplate predeterminada.

Respondido el 07 de Septiembre de 10 a las 12:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.