0

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

我在窗口的资源中定义了样式和触发器:

 <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>

这里应该应用样式:

            <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 标志是通过数据绑定和转换器设置的。由于样式在手动设置样式时有效,我认为问题不存在......

4

2 回答 2

1

这是因为您已将明确x:keyStyle. 所以为了应用样式必须明确地应用它。只需删除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}是用于其按钮样式的关键工具栏。

于 2013-09-19T14:25:09.930 回答
0

你的资源风格有一个关键。一旦你设置了一个显式键,你就覆盖了它的隐式键,你需要在你想使用它的时候声明那个键。

只需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>
于 2013-09-19T14:27:29.747 回答