【问题标题】:Button's ControlTemplate's ContentPresenter's Textblock's Foreground not changingButton 的 ControlTemplate 的 ContentPresenter 的 Textblock 的前景没有改变
【发布时间】:2014-11-24 22:13:42
【问题描述】:

我已经尝试了以下...

  1. 设置按钮的 TextBlock.Foreground。
  2. 设置 contentpresenter 的 TextBlock.Foreground。
  3. 设置 IsMouseOver 触发器,如下所示。
  4. 设置没有目标名称的 IsMouseOver 触发器(假设它点击了按钮)。
  5. 在我尝试过 TextBlock.Foreground 的所有地方,我都尝试过 TextElement.Foreground。

我错过了什么!?我假设我做了一些小的疏忽。 (这不是我的代码,但现在是我的责任:\

另外,请注意这个事实,使用这种风格的地方,按钮的命令和内容都绑定到一个 mvvm 风格的视图模型。

    <Style x:Key="ButtonStyle2" TargetType="{x:Type Button}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
        <Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
        <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="border" SnapsToDevicePixels="true">
                        <Border.Background>
                            <SolidColorBrush Color="{StaticResource Color2}"/>
                        </Border.Background>
                        <ContentPresenter x:Name="contentPresenter" Focusable="False" TextElement.Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter Property="Background" TargetName="border" Value="{StaticResource ButtonIsFocusedBackgroundBrush}"/>
                        </Trigger>
                        <Trigger Property="IsDefaulted" Value="true"/>



                    <!---HERE IS THE PROBLEM (note: the background works fine)--->
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" TargetName="border" Value="{StaticResource ButtonHoverOverBackgroundBrush}"/>
                            <Setter Property="TextBlock.Foreground" TargetName="contentPresenter" Value="White"/>
                        </Trigger>
                    <!---HERE IS THE PROBLEM--->


                        <Trigger Property="IsPressed" Value="true">
                            <Setter Property="Background" TargetName="border" Value="#FF8B7A54"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Opacity" TargetName="border" Value="0.33"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

【问题讨论】:

    标签: c# wpf xaml styles


    【解决方案1】:

    好吧,我终于想通了。我睡在上面,意识到我在我的应用程序的其他地方定义了一个默认的文本块样式。它被应用于 contentpresenter 文本块属性。不知何故(我不确定是否有人想对此发表评论)这种风格阻止了触发器正常工作。所以这里是解决方案 -> 我只发布编辑过的内容演示者......

                        <ContentPresenter x:Name="contentPresenter" 
                                          Content="{TemplateBinding Content}" 
    
                                          TextBlock.Foreground="{TemplateBinding Foreground}" 
                                          TextElement.Foreground="{TemplateBinding Foreground}" 
                                          Focusable="False" 
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                          Margin="{TemplateBinding Padding}" 
                                          RecognizesAccessKey="True" 
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                            <ContentPresenter.Resources>
                                <Style TargetType="{x:Type TextBlock}" BasedOn="{x:Null}" />
                            </ContentPresenter.Resources>
                        </ContentPresenter>
    

    通过清除文本块样式,触发器起作用。不过我想知道为什么会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2021-04-08
      • 2020-04-09
      • 1970-01-01
      • 2014-02-26
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多