Измените стиль рамки сфокусированного текстового поля, используя Blend и WPF - PullRequest
0 голосов
/ 06 января 2011

Я довольно долго занимался этим.Может кто-нибудь, пожалуйста, объясните мне, используя Expression Blend, как редактировать / переопределять стандартный FocusVisualStyle для текстового поля?В настоящее время все мои текстовые поля имеют тот синий акцент, когда они выделены, и это не соответствует теме моего текущего приложения, но я просто не могу понять, как это переопределить.Я думаю, что я установил кисть Border примерно в 10 разных местах в различных шаблонах, событиях и свойствах, и она просто не будет переопределять.

Редактировать: кнопки тоже так делают, и выглядит дажеболее некрасивоМне бы хотелось, чтобы решение включало в себя все элементы управления, которые ведут себя следующим образом.

Набор указаний для Blend предпочтительнее, чем просто вставлять XAML, но на этом этапе я не могу стать разборчивым.

Ответы [ 2 ]

1 голос
/ 06 января 2011

Поведение, которое вы видите, на самом деле является частью элемента ListBoxChrome, который существует в шаблоне элемента управления TextBox по умолчанию.Вы можете легко заменить это более простым шаблоном, который использует свойство BorderBrush, что и делает TextBox в Silverlight.

<ControlTemplate TargetType="{x:Type TextBox}">
    <Border x:Name="Bd" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}"
            BorderThickness="{TemplateBinding BorderThickness}"
            CornerRadius="2">
        <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>
0 голосов
/ 06 января 2011

Чтобы добавить к ответу, для Blend, вы можете щелкнуть правой кнопкой мыши Control, чтобы определить новый шаблон. Как только вы это сделаете, в представлении XAML замените сгенерированный <ControlTemplate> на предоставленный @Josh Einstein. Я также добавил SnapToDevicePixels на границу, чтобы не было псевдонимов, но это необязательно. После того, как вы это сделаете, чтобы изменить границу текстового поля или цвет фона, используйте Шаблон. Но чтобы изменить цвет текста, используйте вместо этого экземпляр объекта (а не шаблон).

...