簡體   English   中英

目標名稱的WPF樣式觸發器無法正常工作

[英]WPF Style Trigger with targetname not working as expected

我在使用觸發器設置ControlTemplate中設置前景顏色時遇到問題。

            <LinearGradientBrush x:Key="TabItemDefaultBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
                <GradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Offset="0.0" Color="#FFF" />
                        <GradientStop Offset="1.0" Color="#EEE" />
                    </GradientStopCollection>
                </GradientBrush.GradientStops>
            </LinearGradientBrush>

            <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />
            <SolidColorBrush x:Key="TabItemSelectBackgroundBrush" Color="#69C" />
            <SolidColorBrush x:Key="PressedBrush" Color="#79C" />
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Grid>
                                <Border
                                    Name="tabBorder"
                                    MinWidth="150"
                                    MinHeight="50"
                                    Margin="0,0,20,0"
                                    Background="{StaticResource TabItemDefaultBackgroundBrush}"
                                    BorderBrush="{StaticResource SolidBorderBrush}"
                                    BorderThickness="1"
                                    CornerRadius="1,1,1,1">
                                    <Grid>
                                        <Grid >
                                            <TextBlock Name="HeaderHeader">
                                                </TextBlock>
                                        </Grid>
                                        <ContentPresenter
                                            x:Name="ContentSite"
                                            Margin="12,2,12,2"
                                            HorizontalAlignment="Center"
                                            VerticalAlignment="Center"
                                            ContentSource="Header"
                                            RecognizesAccessKey="True" />
                                    </Grid>
                                </Border>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter TargetName="HeaderHeader" Property="Foreground" Value="White" />
                                    <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

選擇選項卡后,將正確設置背景邊框“ tabBorder”,但文本塊“ HeaderHeader”的前景未響應。

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="HeaderHeader" Property="Foreground" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

當我刪除TargetName並將前景設置為白色(對所有組件)時,它確實起作用。 (但顯然內容pre中所有內容的前景色

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter Property="Foreground" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

甚至更陌生,當我將TargetName放回原位,但是將setter屬性從前景更改為背景時,它確實起作用了! 然后,將所選標簽的背景設置為白色。

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="HeaderHeader" Property="Background" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

到底為什么它不能滿足我的需要(為所選標簽設置前景)?

啊哈,我今天學到了一些東西……我看錯了方向! 在“ ControlTemplate”上進行更多搜索之后,終於有一些東西陷入ContentPresenter不顯示選項卡的信息,而是顯示選項卡的標簽,僅此而已。 所以我的觸發器工作得很好,但是它設置了一個毫無意義的文本塊的前台!

當我將觸發器更改為控件實際顯示標簽的觸發器時,這很容易實現……

<Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="White" />

為了能夠在文本元素上設置屬性,我確實必須使用附加的屬性'TextElement'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM