2017-01-04 2 views
0

Перед тем, как опубликовать мой код, дайте мне опубликовать изображение, где вы можете легко заметить, что Acctually происходит:Как настроить текстовое поле и поле со списком границы WPF

enter image description here

И как вы можете видеть на текстовые поля, толщина границы не является одинаковым со всех сторон. В случае с текстовым полем, например, гораздо ярче справа. Также на комбобоксе есть что-то вроде тени сверху и на левой стороне ..

Как я мог исправить это, я просто хочу 1px синей рамки вокруг моего управления ..

А вот мой код:

<ComboBox Name="cmbComboBoxOne" Height="40" BorderThickness="1" VerticalAlignment="Center" BorderBrush="#0091EA" ></ComboBox> 
<TextBox Name="txtTextBoxOne" TextWrapping="Wrap" Text="TextBox" BorderThickness="1"  BorderBrush="#0091EA" /> 

EDIT:

Я применил Edit Template Copy, я установить толщину границы 1 и цвета до фиолетового, и это выглядит следующим образом:

enter image description here

Так что, ребята, опять же, это не хорошо с толщиной: 1 рх, например, с толщиной: 2px его удивительным, все стороны равны, но 2рх слишком много для меня ..

Вот мой код после того, как я редактировал шаблон:

<TextBox x:Name="txtName" Grid.Column="1" SnapsToDevicePixels="True" UseLayoutRounding="True" Grid.Row="0" Margin="5,0,10,0" TextWrapping="Wrap" Text="TextBox" Height="40" VerticalAlignment="Center" Style="{DynamicResource TextBoxStyle1}" > 
      <TextBox.Resources> 
       <Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}"> 
        <Setter Property="BorderBrush" Value="Purple"/> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
        <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
        <Setter Property="Padding" Value="1"/> 
        <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
        <Setter Property="HorizontalContentAlignment" Value="Left"/> 
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
        <Setter Property="AllowDrop" Value="true"/> 
        <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> 
        <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type TextBox}"> 
           <Microsoft_Windows_Themes:ClassicBorderDecorator x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" BorderStyle="Sunken" Background="{TemplateBinding Background}"> 
            <ScrollViewer x:Name="PART_ContentHost"/> 
           </Microsoft_Windows_Themes:ClassicBorderDecorator> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsEnabled" Value="false"> 
             <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
             <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </TextBox.Resources> 
     </TextBox> 

, как вы можете видеть, ребята

<Setter Property="BorderBrush" Value="Purple"/> 
        <Setter Property="BorderThickness" Value="1"/> 

установлены, бу т результат как-то же:/

+0

WPF-макет - это плавающая точка, а не целое число. Играйте с SnapToDevicePixels и UseLayoutRounding –

+0

@EdPlunkett первый раз, когда я слышу об этом помощнике, как я мог его реализовать здесь? Не могли бы вы привести мне пример? Большое спасибо Ed –

+0

Это свойства элементов XAML. '

ответ

1

Попробуйте установить SnapsToDevicePixels и/или UseLayoutRounding свойства True:

<ComboBox Name="cmbComboBoxOne" ... SnapsToDevicePixels="True" UseLayoutRounding="True" /> 

Если это не работает, вы можете попытаться изменить шаблон управления управления. Щелкните их правой кнопкой мыши в режиме разработки в Visual Studio 2012+ или Blend и выберите «Редактировать шаблон» -> «Редактировать копию», чтобы скопировать шаблоны по умолчанию в свою разметку XAML, а затем установить указанные выше свойства в элементах Border в сгенерированных шаблонах.

Edit: Заменить ClassicBorderDecorator с обычным Border элементом:

<TextBox x:Name="txtName" Grid.Column="1" SnapsToDevicePixels="True" UseLayoutRounding="True" Grid.Row="0" Margin="5,0,10,0" TextWrapping="Wrap" Text="TextBox" Height="40" VerticalAlignment="Center" Style="{DynamicResource TextBoxStyle1}" > 
    <TextBox.Resources> 
     <Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}"> 
      <Setter Property="BorderBrush" Value="Purple"/> 
      <Setter Property="BorderThickness" Value="1"/> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
      <Setter Property="Padding" Value="1"/> 
      <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> 
      <Setter Property="HorizontalContentAlignment" Value="Left"/> 
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
      <Setter Property="AllowDrop" Value="true"/> 
      <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> 
      <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TextBox}"> 
         <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 
             Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
          <ScrollViewer x:Name="PART_ContentHost"/> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TextBox.Resources> 
</TextBox> 
+0

проверить EDIT моего вопроса –

+0

См. Мой отредактированный ответ. – mm8

+0

Работает помощником, но можно ли редактировать копию этого шаблона только один раз и применить его ко всем текстовым полям? потому что, если мы будем следовать этому примеру для 10 текстовых полей, это будет как 100 строк кода, это слишком много: D Спасибо большое! : *: *: *: *: * –

0

Если вы хотите настроить текстовое поле и COMBOBOX границы необходимо изменить стиль по умолчанию и шаблон из этих элементов управления с помощью правой кнопки мыши по контролю и выберите шаблон редактирования.