2013-06-26 43 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

的了borderThickness是了borderThickness = 「0,0,0,2」 第一PaymentTerms文本框,但了borderThickness = 「0,0,0,1」 的其他的? – SvenG

+1

嗨SvenG - 對不起,這是一個錯字 - 糾正後雖然,問題依然存在。 –

+0

你周圍的面板是什麼?我用StackPanel''複製/粘貼了你的代碼,看起來很好.. – SvenG

回答

1

即使你的佈局是非常低效的,它不是問題,因爲所有上述意見建議。與SnapToDevicePixels,Padding,Margins等無關。它是TextBox'的控制風格的一部分。看起來如果你設置的BorderWidth大於默認值,它會在所有的角落,但如果你下面它不會。如果你提取TextBox的模板,你可以看到它的邊框和樣式。因此,爲了「擊敗」這種不規則性,您不需要嘗試對您的樣式間接操作TextBoxBorder屬性,而需要覆蓋其模板。然後直接在Template中操縱它的Border

這裏有一個,將工作(我插入您的制定者到它)風格:

<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>