2011-11-21 4 views
6

Estoy intentando construir una plantilla para combobox basado en ejemplos msdn pero tengo un error extraño. Más concretamente, si escribí texto largo en el cuadro combinado normal, el texto se mueve hacia la izquierda y vemos que todo el tiempo aparece cuidado. Sin embargo, en los ejemplos de msdn cuando escribí texto largo, caret se mueve fuera del combo. Aquí es picute forma en que se vea como:¿Por qué el cursor en este ComboBox editable excede los límites?

enter image description here

Cuando selecciono el texto que se parece a esto: ejemplos

enter image description here enter image description here

que he utilizado desde Framework 3.5 y Framework 4 ayuda cuadro combinado y después de copiar y pegar. Sigo teniendo la misma situación. Gracias por cualquier ayuda.

EDIT:

<Window x:Class="ComboBoxTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Framework 3.5" Height="350" Width="525"> 

    <Window.Resources> 
     <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="20" /> 
       </Grid.ColumnDefinitions> 
       <Border x:Name="Border" Grid.ColumnSpan="2" CornerRadius="2" Background="White" 
         BorderBrush="Black" BorderThickness="1" /> 
       <Border Grid.Column="0" CornerRadius="2,0,0,2" Margin="1" Background="#FFF" 
         BorderBrush="Black" BorderThickness="0,0,1,0" /> 
       <Path x:Name="Arrow" Grid.Column="1" Fill="#444" HorizontalAlignment="Center" 
         VerticalAlignment="Center" Data="M 0 0 L 4 4 L 8 0 Z" /> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <Trigger Property="ToggleButton.IsMouseOver" Value="true"> 
        <Setter TargetName="Border" Property="Background" Value="Black" /> 
       </Trigger> 
       <Trigger Property="ToggleButton.IsChecked" Value="true"> 
        <Setter TargetName="Border" Property="Background" Value="LightGray" /> 
       </Trigger> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter TargetName="Border" Property="Background" Value="#EEE" /> 
        <Setter TargetName="Border" Property="BorderBrush" Value="#AAA" /> 
        <Setter Property="Foreground" Value="#888" /> 
        <Setter TargetName="Arrow" Property="Fill" Value="#888" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 

     <!-- something is wrong here but what?? --> 
     <ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox"> 
      <Border x:Name="PART_ContentHost" Focusable="False" /> 
     </ControlTemplate> 

     <Style x:Key="MsComboBox" TargetType="ComboBox"> 
      <Setter Property="SnapsToDevicePixels" Value="true" /> 
      <Setter Property="OverridesDefaultStyle" Value="true" /> 
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> 
      <Setter Property="ScrollViewer.CanContentScroll" Value="true" /> 
      <Setter Property="MinWidth" Value="120" /> 
      <Setter Property="MinHeight" Value="20" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ComboBox"> 
         <Grid> 
          <ToggleButton Name="ToggleButton" Template="{StaticResource ComboBoxToggleButton}" Grid.Column="2" 
              Focusable="false" IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" 
              ClickMode="Press"></ToggleButton> 

          <ContentPresenter Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}" 
               ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
               ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3" VerticalAlignment="Center" 
               HorizontalAlignment="Left" /> 

          <TextBox x:Name="PART_EditableTextBox" 
            Style="{x:Null}" 
            Template="{StaticResource ComboBoxTextBox}" 
            HorizontalAlignment="Left" VerticalAlignment="Center" Margin="3,3,23,3" Focusable="True" Background="Transparent" 
            Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}" /> 

          <Popup Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" 
            Focusable="False" PopupAnimation="Slide"> 
           <Grid Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" 
             MaxHeight="{TemplateBinding MaxDropDownHeight}"> 
            <Border x:Name="DropDownBorder" Background="Black" BorderThickness="1" 
              BorderBrush="#888" /> 
            <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True"> 
             <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /> 
            </ScrollViewer> 
           </Grid> 
          </Popup> 
         </Grid> 
         <ControlTemplate.Triggers>        
          <Trigger Property="IsEditable" Value="true"> 
           <Setter Property="IsTabStop" Value="false" /> 
           <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" /> 
           <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="comboBox1" VerticalAlignment="Top" IsEditable="True" 
        Width="185" Style="{StaticResource MsComboBox}" /> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="12,41,0,0" Name="comboBox2" VerticalAlignment="Top" IsEditable="True" Width="185" /> 

    </Grid> 
</Window> 
+1

Por favor, publique el XAML para su cuadro desplegable. – Paparazzi

+0

¿Quiere que depuremos algún XAML malo que acaba de copiar y pegar desde algún lugar sin siquiera leerlo usted mismo? –

+1

Heh. Publicaré mi código, pero es largo y muy similar a uno en MSDN. Y no es malo XAML sino XAML de la página oficial de MSDN. Creo que todos los que estaban buscando plantillas de combobox se topan con este ejemplo y tal vez alguien me diga qué está mal con ellos o alguien sabe un mejor ejemplo de plantilla para empezar. No sé por qué textbox no se comporta como debería. – bizon

Respuesta

6

Su Border no contiene funcionalidad para desplazarse de forma automática el contenido cuando se apaga la pantalla, por lo que sólo mantiene su elaboración. Cámbielo a ScrollViewer y funcionará.

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox"> 
    <ScrollViewer x:Name="PART_ContentHost" Focusable="False" /> 
</ControlTemplate> 
Cuestiones relacionadas