WPF - Пользовательское окно с пользовательским DefaultStyleKey теряет FocusVisualStyle - PullRequest
3 голосов
/ 24 мая 2011

Я создал собственное окно, переопределяющее его DefaultStyleKey , но я теряю FocusVisualStyle всех элементов управления, которые содержатся внутри окна.Даже пользовательский FocusVisualStyle не работает.Что мне здесь не хватает?

Вот как я переопределяю DefaultStyleKey в статическом ctor * CustomWindow классе:

DefaultStyleKeyProperty.OverrideMetadata( typeof( CustomWindow ), new FrameworkPropertyMetadata( typeof( CustomWindow ) ) );

Вотстиль по умолчанию, определенный в generic.xaml :

<Style TargetType="{x:Type local:CustomWindow}">
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type local:CustomWindow}">
            <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
               <ContentPresenter />
            </Border>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

Следующим шагом является изменение базового типа MainWindow на CustomWindow идобавить две кнопки.При использовании клавиши Tab для навигации прямоугольник фокуса не отображается.

Любая помощь приветствуется!

1 Ответ

4 голосов
/ 24 мая 2011

Вам нужно поместить ContentPresenter в AdornerDecorator, например, так:

<AdornerDecorator>
    <ContentPresenter/>
</AdornerDecorator>

Это декоратор, который отображает все прямоугольники фокуса.

Когда все готовоне работает, вы можете посмотреть на шаблоны управления по умолчанию.Затем вы пробуете их шаблон и ваш шаблон и выясняете, почему один работает, а другой нет!

Я посмотрел Window, и это выглядит так:

<Style x:Key="{x:Type Window}"
       TargetType="{x:Type Window}">
    <Setter Property="Foreground"
            Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
    <Setter Property="Background"
            Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Window}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <AdornerDecorator>
                        <ContentPresenter/>
                    </AdornerDecorator>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Window.ResizeMode"
                 Value="CanResizeWithGrip">
            <Setter Property="Template"
                    Value="{StaticResource WindowTemplateKey}"/>
        </Trigger>
    </Style.Triggers>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...