2011-11-21 10 views
6

Próbuję zbudować szablon dla combobox na podstawie przykładów msdn, ale mam dziwny błąd. Mówiąc dokładniej, jeśli napisałem długi tekst w normalnym polu combobox, tekst przesuwa się w lewo i widzimy, że cały czas jest on ostrożny. Jednak w przykładach msdn, gdy pisałem długi tekst, karetka porusza się poza kombinacją. Oto picute jak to wygląda:Dlaczego ogranicznik w tym edytowalnym bloku ComboBox przekracza granice?

enter image description here

Kiedy zaznaczyć tekst wygląda tak:

enter image description here enter image description here

użyłem przykładów z Framework 3.5 i Framework 4 combobox pomoc i po Skopiuj i wklej Otrzymuję tę samą sytuację. Dzięki za pomoc.

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

Proszę zaksięgować XAML dla swojego combobox. – Paparazzi

+0

Chcesz, żebyśmy debugowali niektóre brzydkie XAML, które po prostu skopiuj-wkleiłeś skądś, nawet nie czytając samemu? –

+1

Heh. Opublikuję mój kod, ale jest długi i bardzo podobny do tego na MSDN. I to nie jest brzydki XAML, ale XAML z oficjalnej strony MSDN. Myślę, że każdy, kto szukał szablonu combobox, podszedł do tego przykładu i może ktoś mi powiedział, co jest z nim nie tak lub ktoś zna lepszy przykład na początek. Nie wiem, dlaczego textbox nie zachowuje się tak, jak powinien. – bizon

Odpowiedz

6

Twój Border nie zawiera funkcjonalność automatycznego przewijania zawartości kiedy gaśnie ekran, więc to po prostu utrzymuje rysowania. Zmień go na ScrollViewer i zadziała.

<ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox"> 
    <ScrollViewer x:Name="PART_ContentHost" Focusable="False" /> 
</ControlTemplate> 
Powiązane problemy