2011-11-21 15 views
6

Sto provando a creare un modello per combobox basato su esempi msdn ma ho uno strano errore. Più precisamente, se scrivevo un lungo testo in una normale casella combinata, il testo si sposta a sinistra e vediamo continuamente il segno. Comunque negli esempi msdn, quando ho scritto un testo lungo, il cursore si sposta all'esterno della combo. Ecco picute come apparire come:Perché il segno di omissione in questo ComboBox modificabile supera i limiti?

enter image description here

Quando seleziono il testo che assomiglia a questo: esempi

enter image description here enter image description here

ho usato da Framework 3.5 e Framework 4 combobox aiuto e dopo copia e incolla sto mantenendo la stessa situazione. Grazie per qualsiasi aiuto.

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

Si prega di inviare XAML per la tua casella combinata. – Paparazzi

+0

Quindi vuoi che eseguiamo il debug di alcuni XAML scadenti che hai appena incollato da qualche parte senza nemmeno leggerlo da solo? –

+1

Heh. Pubblicherò il mio codice, ma è lungo e molto simile a quello su MSDN. E non è XAML schifoso ma XAML dalla pagina MSDN ufficiale. Penso che tutti quelli che stavano cercando sul modello di combobox si imbattessero in questo esempio e forse qualcuno mi dicesse cosa c'è di sbagliato in loro o qualcuno conosce un esempio di modello migliore per iniziare. Non so perché la casella di testo non si comporti come dovrebbe. – bizon

risposta

6

tuo Border non contiene la funzionalità per lo scorrimento automaticamente il contenuto quando si spegne lo schermo, in modo che continua a disegnarla. Cambialo in un ScrollViewer e funzionerà.

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