2013-06-26 3 views
3

Давайте рассмотрим это как пример. Теперь у меня есть всего 8 текстовых полей. Я использую статический стиль ресурсов, чтобы убедиться, что у всех их есть тот же самый набор стилей. Но обратите внимание, что некоторые из текстовых полей имеют нижнюю границу, а другие нет. Почему это происходит?Пограничные ширины отображаются непоследовательно

enter image description here Вот код

<Style x:Key="AddressTextBox" TargetType="TextBox">    
     <Setter Property="MinWidth" Value="230"></Setter> 
     <Setter Property="MaxWidth" Value="260"></Setter> 
     <Setter Property="MaxLength" Value="45"></Setter> 
     <Setter Property="Margin" Value="1"></Setter> 
     <Setter Property="BorderThickness" Value="1,1,1,1"/> 
     <Setter Property="HorizontalAlignment" Value="Left"/> 
     <Setter Property="Padding" Value="1,2,0,1"/> 
     <Setter Property="BorderBrush" Value="Gray"></Setter> 
     <Setter Property="Height" Value="20"></Setter> 
    </Style> 

<DockPanel> 
    <StackPanel> 
     <Grid Margin="5"> 
      <StackPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7">Postal</TextBlock> 
         <TextBox Style="{StaticResource AddressTextBox}"></TextBox>            
       </DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7"></TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7"></TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7"></TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
       <DockPanel Height="10"></DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7">Street</TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7"></TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7"></TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
       <DockPanel Height="Auto"> 
        <TextBlock Width="50" Margin="7"></TextBlock> 
        <TextBox Style="{StaticResource AddressTextBox}"></TextBox> 
       </DockPanel> 
      </StackPanel> 
     </Grid> 
    </StackPanel> 
</DockPanel> 
+0

The BorderThickness является BorderThickness = "0,0,0,2" на первом PaymentTerms TextBox, но BorderThickness = "0,0,0,1" на другие ? – SvenG

+1

Hi SvenG - извините, это была опечатка - после исправления проблема все еще существует. –

+0

Какая у вас окружающая панель? Я скопировал/вставлял ваш код в пустую форму с помощью StackPanel '' и выглядит отлично .. – SvenG

ответ

1

Даже если ваш макет очень неэффективен, его не проблема, так как все выше комментарии свидетельствуют. Не имеет отношения к SnapToDevicePixels, Padding, Margins и т. Д. Это часть стиля управления TextBox'. Кажется, что если вы установили BorderWidth больше, чем по умолчанию, он будет придерживаться всех углов, но если вы пойдете ниже этого, это не так. Если вы извлекаете шаблон TextBox, вы можете увидеть его границу и стиль. Поэтому, чтобы «избить» эту нерегулярность, вместо того, чтобы пытаться косвенно манипулировать TextBox 's Border свойствами в вашем стиле, вам необходимо переопределить его шаблон. Затем манипулируйте его Border непосредственно в Template.

Вот стиль, который будет работать (я включил в своих сеттеров в него):

<SolidColorBrush x:Key="DisabledBackgroundBrush" Color="LightGray"/> 
    <SolidColorBrush x:Key="DisabledForegroundBrush" Color="Gray"/> 
    <SolidColorBrush x:Key="EnabledBackgroundBrush" Color="White"/> 

    <Style x:Key="AddressTextBox" TargetType="{x:Type TextBoxBase}"> 
     <Setter Property="SnapsToDevicePixels" Value="True"/> 
     <Setter Property="OverridesDefaultStyle" Value="True"/> 
     <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
     <Setter Property="AllowDrop" Value="true"/> 
     <Setter Property="MinWidth" Value="230"/> 
     <Setter Property="MaxWidth" Value="260"/> 
     <Setter Property="Margin" Value="1"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="HorizontalAlignment" Value="Left"/> 
     <Setter Property="Padding" Value="1,2,0,1"/> 
     <Setter Property="Height" Value="20"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBoxBase}"> 
        <Border Name="Border" CornerRadius="2" Padding="2" Background="{StaticResource EnabledBackgroundBrush}" 
          BorderBrush="Gray" BorderThickness="1" > 
         <ScrollViewer Margin="0" x:Name="PART_ContentHost"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/> 
          <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBackgroundBrush}"/> 
          <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

также, просто отзыв о макете. Для того, чтобы свести к минимуму неэффективные, я хотел бы использовать Grid:

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 

     <TextBlock Text="Postal"/> 
     <TextBox Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="1" /> 
     <TextBox Grid.Row="1" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="2" /> 
     <TextBox Grid.Row="2" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="3" /> 
     <TextBox Grid.Row="3" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="4" Text="Street" Margin="7,10,7,7"/> 
     <TextBox Grid.Row="4" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="5"/> 
     <TextBox Grid.Row="5" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="6"/> 
     <TextBox Grid.Row="6" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 

     <TextBlock Grid.Row="7"/> 
     <TextBox Grid.Row="7" Grid.Column="1" Style="{StaticResource AddressTextBox}"/> 
    </Grid>