Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf AvalonDock:聚焦时更改标题背景_Wpf_Avalondock - Fatal编程技术网

Wpf AvalonDock:聚焦时更改标题背景

Wpf AvalonDock:聚焦时更改标题背景,wpf,avalondock,Wpf,Avalondock,如果窗格已聚焦,我想更改窗格标题的背景 所以我试过这个: <Style TargetType="xcad:AnchorablePaneTitle"> <Setter Property="Background" Value="Green" /> <Style.Triggers> <Trigger Property="IsFocused" Value="true">

如果窗格已聚焦,我想更改窗格标题的背景

所以我试过这个:

    <Style TargetType="xcad:AnchorablePaneTitle">
        <Setter Property="Background" Value="Green" />
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
                <Setter Property="Background" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>

应用绿色背景,但如果在窗格中选择控件,则不会显示红色。 特殊的副作用:如果我在窗格中取消锁定,则标题的背景设置为默认。如果我将其固定,它将设置为绿色


如何更改焦点?

当前解决方案存在两个问题

只有当窗格停靠在
DockingManager
中时,设置
AnchorablePaneTitle
的样式才有效。一旦您松开窗格,就不再有
AnchorablePaneTitle
,因为AvalonDock将根元素更改为具有不同结构的
LayoutFloatingWindowControl

第二个问题是您正在使用
IsFocused
属性。这不起作用,因为
AnchorablePaneTitle
根本无法聚焦(默认情况下,它只是一个
TextBlock

要实现这一点,您必须使用
DockingManager
AnchorableTitleTemplate
属性为标题创建
DataTemplate

以下是一个例子:

<xcad:DockingManager.AnchorableTitleTemplate>
    <DataTemplate>
        <Grid>
            <Grid.Style>
                <Style TargetType="Grid">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Model.IsActive, Mode=OneWay, 
                             RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type xcad:LayoutAnchorableControl}},
                             FallbackValue=False}" Value="True">
                            <Setter Property="Background" Value="Red"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsKeyboardFocusWithin, Mode=OneWay,
                            RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type xcad:LayoutFloatingWindowControl}},
                            FallbackValue=False}" Value="True">
                            <Setter Property="Background" Value="Blue"/>
                        </DataTrigger>
                    </Style.Triggers>
                    <Setter Property="Background" Value="Green"/>
                </Style>
            </Grid.Style>
            <TextBlock Foreground="White" FontWeight="Bold" Text="{Binding Title}" />
        </Grid>
    </DataTemplate>
</xcad:DockingManager.AnchorableTitleTemplate>

在这里,我创建了两个数据触发器,它们根据锚点当前处于的模式对不同的属性做出反应:停靠或取消停靠

对于停靠状态,我使用
Model.IsActive
属性,该属性运行良好。
对于未锁定(浮动)状态,我首先尝试了
xcad:LayoutFloatingWindowControl
(它源自
窗口
)的
IsActive
属性,但对于所有浮动窗口,它总是
true
。这可能是因为它们都有一个
所有者
(主窗口)。因此,我决定使用
IsKeyboardFocusWithin
,这对浮动窗口非常有效。

根据您的XAML标记,这只能在聚焦窗格标题时起作用。您可能试图实现的是,当窗格处于活动状态时,将标题设置为红色(这意味着其内容具有焦点)。是吗?是的,没错。如果内容被选中/聚焦,则应为红色