Как изменить свойство переднего плана AvalonDock AnchorablePaneTitle ContentPresenter при автоматическом скрытии?

1

У меня проблема с элементами управления AvalonDock. Заголовок моей панели белым по синему при отображении, черный над белым, когда он имеет вкладку и должен быть черным над белым, когда AutoHiden и мышь над вкладкой (вид "предварительного просмотра", поэтому еще не состыковался)... Но как скриншот будет лучше описывать проблему, чем проблема:

Изображение 174551

И здесь contentpresenter (строка 429 Metro Theme.xaml в последней исходной версии)

<ContentPresenter 
    x:Name="Header"            
    Margin="5,3"
    TextElement.Foreground="{DynamicResource AvalonDock_ThemeMetro_Foreground}"
    Content="{Binding Model, RelativeSource={RelativeSource TemplatedParent}}" 
    ContentTemplate="{Binding Model.Root.Manager.AnchorableTitleTemplate, RelativeSource={RelativeSource TemplatedParent}}"
    ContentTemplateSelector="{Binding Model.Root.Manager.AnchorableTitleTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}"/>

(AvalonDock_ThemeMetro_Foreground - белый, как обычный передний план, поскольку он более синий, например, заголовок)

Должно быть:

Изображение 174551

Есть ли у кого-нибудь представление о том, кто поменялся для изменения стиля? У меня нет глубоких знаний о том, как AvalonDocks работает внутри, и мои фактические исследования просто дали мне базовое понимание большой картины, но я не могу точно определить способ ее выполнения.

Теги:
wpf
avalondock

1 ответ

1
Лучший ответ

Я выяснил эту проблему. По-видимому, стиль, применяемый к LayoutAnchorableControl, не тот, который вы определяете, а тот, который вы используете, из 'generic.xaml' при размещении в LayoutAutoHideWindowControl. Я до сих пор не знаю, почему и как, но обновление стиля "generic.xaml" устраняет проблему. Я продолжу исследовать причину и найти способ заставить его использовать пользовательский стиль при размещении в "LayoutAutoHideWindowControl".

EDIT Итак, я понял, что это было действительно глупо, когда я определял стиль LayoutAutoHideWindow, я не обращал внимания на свойство "AnchorableStyle", позволяющее вам предоставить стиль для применения к созданному LayoutAnchorableControl. Итак, вот стиль LayoutAnchorabeControl:

<!--The "Metro" LayoutAnchorableControl Style-->
<Style TargetType="{x:Type avalonDockControls:LayoutAnchorableControl}" x:Key="AvalonDock_ThemeMetro_LayoutAnchorableControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type avalonDockControls:LayoutAnchorableControl}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Border x:Name="Header" Background="{DynamicResource AvalonDock_ThemeMetro_HeaderBackground}">
                            <avalonDockControls:AnchorablePaneTitle Model="{Binding Model, RelativeSource={RelativeSource TemplatedParent}}"/>
                        </Border>
                        <ContentPresenter Grid.Row="1" FlowDirection="{TemplateBinding FlowDirection}"
                            Content="{Binding LayoutItem.View, RelativeSource={RelativeSource TemplatedParent}}"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Model.IsFloating}" Value="True"/>
                            <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=Model.Parent.IsDirectlyHostedInFloatingWindow}" Value="True"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Visibility" Value="Collapsed" TargetName="Header"/>
                    </MultiDataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<!--Apply it as default too-->
<Style TargetType="{x:Type avalonDockControls:LayoutAnchorableControl}" BasedOn="{StaticResource AvalonDock_ThemeMetro_LayoutAnchorableControl}" />

И здесь, как сделать LayoutAutoHideWindowControl использовать его как стиль, применяемый к LayoutAnchorableControl, который он создает:

<Style x:Key="{x:Type avalonDockControls:LayoutAutoHideWindowControl}" TargetType="{x:Type avalonDockControls:LayoutAutoHideWindowControl}">
    <Setter Property="Background" Value="{DynamicResource AvalonDock_ThemeMetro_Background}"/>
    <Setter Property="AnchorableStyle" Value="{StaticResource AvalonDock_ThemeMetro_LayoutAnchorableControl}" />
</Style>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню