按钮不会从资源中获取样式



我在工具栏中有两个按钮,如果按钮已启用=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>

我注意到,第一个按钮不应用样式,因此不会改变对比度。而第二个按钮应用了我给它的样式。那么,为什么我的第一个按钮找不到资源?目标类型已设置...搜索向上进入逻辑树...

后来,我尝试了类似的东西,在DataGridTemplateColumn中使用一个按钮:

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

在 thrideButton 上,即使手动设置样式也无济于事。我几乎迷路了...谁能看出我的错误?

顺便说一下:IsEnabled 标志是使用数据绑定和转换器设置的。 由于手动设置样式时样式有效,因此我认为问题不在那里......

这是因为您已经明确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}是用于其按钮样式的键工具栏。

您的资源样式有一个键。设置显式键后,您将覆盖它的隐式键,并且每当要使用它时,都需要声明该键。

只需从样式中删除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>

相关内容

  • 没有找到相关文章

最新更新