Button不会从资源中获取Style

时间:2013-09-19 14:21:46

标签: wpf button styles

我在工具栏中有两个按钮,如果Button isEnabled = false,我希望按钮的不透明度改变

我在我的窗口的资源中定义了Style和一个触发器:

 <Window.Resources>
        <Style x:Key="buttonOpacity" TargetType="Button">
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" Value="0.3" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

这里应该使用Style:

            <ToolBar>
            <Button Click="FirstClick" 
                    IsEnabled="False">
                <Image Height="24" Source="Ressources/First.png"/>
            </Button>
            <Button Click="SecondClick" 
                    IsEnabled="False"
                    Style="{StaticResource buttonOpacity}">
                <Image Height="24" Source="Ressources/Second.png"/>
            </Button>
        </ToolBar>

我注意到,第一个Button没有应用样式,因此不会改变不透明度。而第二个按钮适用我给它的样式。那么,为什么我的第一个按钮找不到资源? TargetType已设置...搜索向上移动逻辑树...

稍后,我在DataGridTemplateColumn中尝试了与Button类似的东西:

                        <DataGridTemplateColumn>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Click="thridButton"
                                            IsEnabled="false"/>
                                    </Button>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>

在thridButton上,即使手动设置样式也无济于事。我很丢失......有谁能看到我的错误?

顺便说一句:IsEnabled标志设置有数据绑定和转换器。由于Style在手动设置样式时起作用,我认为问题不存在......

2 个答案:

答案 0 :(得分:1)

这是因为您已向您的x:key明确Style。所以为了应用样式必须明确地应用它。只需删除x:Key,它就会应用于Window中的所有按钮。

你也有工具栏中的按钮。工具栏在按钮上应用自己的样式,这就是默认情况下它们为平的原因。因此,为了覆盖默认样式,我们需要使用下面的保留键来定义样式:

<Style x:Key="{x:Static ToolBar.ButtonStyleKey}" TargetType="Button">

     <Style.Triggers>
          <Trigger Property="IsEnabled" Value="False">
              <Setter Property="Opacity" Value="0.2" />
           </Trigger>
       </Style.Triggers>
 </Style>

请注意{x:Static ToolBar.ButtonStyleKey}是关键工具栏用于其按钮样式。

答案 1 :(得分:0)

您的资源样式为key。设置显式密钥后,您将覆盖它的隐式密钥,并且需要在需要时使用该密钥。

只需从您的样式中删除x:Key="buttonOpacity"即可隐式应用,或添加使用该密钥以使其明确应用

    <ToolBar>
        <Button Click="FirstClick" 
                Style="{StaticResource buttonOpacity}"
                IsEnabled="False">
            <Image Height="24" Source="Ressources/First.png"/>
        </Button>
        <Button Click="SecondClick" 
                IsEnabled="False"
                Style="{StaticResource buttonOpacity}">
            <Image Height="24" Source="Ressources/Second.png"/>
        </Button>
    </ToolBar>