0

我正在学习 WPF。我试图申请BackgroundForeground使用TextBlock. Style.Trigger根据我的定义Trigger,我可以注意到 Foreground 正在更改MouseOver,但不是Background。你能帮忙吗?下面是我的 XAML:

<Window x:Class="WpfApplication1.ApplyingStyle"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ApplyingStyle"
        Height="300"
        Width="300">
  <Window.Resources>
    <Style x:Key="myStyle">
      <Setter Property="Control.Background"
              Value="Red" />
      <Setter Property="Control.FontFamily"
              Value="Times New Roman" />
      <Setter Property="Control.FontSize"
              Value="25" />
      <Style.Triggers>
        <Trigger Property="Control.IsMouseOver"
                 Value="True">
          <Setter Property="Control.Foreground"
                  Value="HotPink" />
          <Setter Property="Control.Background"
                  Value="Blue" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </Window.Resources>
  <Grid ShowGridLines="True">
    <Grid.RowDefinitions>
      <RowDefinition   Height="*" />
      <RowDefinition />
      <RowDefinition />
    </Grid.RowDefinitions>
    <TextBlock Name="myTextBlock"
               Grid.Row="1"
               Grid.Column="0"
               Style="{StaticResource myStyle}">Hello</TextBlock>
  </Grid>
</Window>
4

2 回答 2

1

我建议使用Style.TargetType,这允许

  1. 缩短Setter.Property
  2. 防止正常属性和附加属性之间的歧义
  3. 如果目标类型实际上具有该属性,则获取一些 IDE 验证

TextBlock不是这就是为什么这不起作用Control使用TargetType="TextBlock"并更改Control.BackgroundBackground或使用TextBlock.Background.

(在使用样式时还要注意值优先级,如果您Background在其TextBlock本身上设置了,则您有一个完全覆盖样式的本地值)

于 2013-02-27T03:03:51.627 回答
0

尝试使用您尝试在样式声明中应用样式的控件类型,而不是使用Control.BackgrounduseTextBlock.Background或仅将 设置TargetTypeTextBlock。当我将您的样式设置为这样时,它似乎起作用了。

<Window x:Class="WpfApplication1.ApplyingStyle"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ApplyingStyle" Height="300" Width="300">
    <Window.Resources>
        <Style x:Key="myStyle" TargetType="TextBlock">
            <Setter Property="Background" Value="Red" />
            <Setter Property="FontFamily" Value="Times New Roman" />
            <Setter Property="FontSize" Value="25" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True"  >
                    <Setter Property="Background" Value="Blue" />
                    <Setter Property="Foreground" Value="HotPink" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

    <Grid ShowGridLines="True" >
        <Grid.RowDefinitions>
            <RowDefinition   Height="*" />
            <RowDefinition/>
            <RowDefinition />
        </Grid.RowDefinitions>

        <TextBlock Name="myTextBlock"  
                   Grid.Row="1" 
                   Grid.Column="0" 
                   Style="{StaticResource myStyle}">Hello</TextBlock>
    </Grid>
</Window>
于 2013-02-27T02:58:52.823 回答