如何在 WPF 中禁用具有 Button.Content 标记样式的按钮
How to disable a Button with a style for Button.Content tag in WPF
我有一个这样的按钮:
<Button x:Name="CloseBtn" Click="CloseBtn_Click" IsEnabled="{Binding IsCloseEnabled}"
HorizontalAlignment="Right" Style="{StaticResource TopButton}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Height="30" Width="30" Source="{StaticResource CloseIcon}" />
<Label Foreground="Black">Close</Label>
</StackPanel>
</Button.Content>
</Button>
它的样式是这样的:
<Style x:Key="TopButton" TargetType="{x:Type Button}">
<Setter Property="Padding" Value="10,5" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="TextBlock.Foreground" Value="#FFADADAD"/>
</Trigger>
</Style.Triggers>
</Style>
然而,当绑定 "IsCloseEnabled" returns 为 false 时,按钮看起来不像被禁用——颜色“#FFADADAD”未应用于前景。不知道哪里出错了。
您的 Label 的硬设置值为 Foreground="Black",它将覆盖您尝试通过触发器应用的任何其他颜色。删除 "Foreground=Black" 并查看是否可以解决您的问题。
更新 #2:如果您还想控制图像看起来已禁用,最好让图像源由一种样式控制,用 "disabled" png 替换源。像这样:
<Button x:Name="CloseBtn" Click="CloseBtn_Click" IsEnabled="{Binding IsCloseEnabled}" HorizontalAlignment="Right" Style="{StaticResource TopButton}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image x:Name="myImage" Height="30" Width="30">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{StaticResource CloseIcon}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsCloseEnabled}" Value="False">
<Setter Property="Source" Value="{StaticResource CloseIconDisabled}"/>
</DataTrigger>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Label>Close</Label>
</StackPanel>
</Button.Content>
</Button>
我有一个这样的按钮:
<Button x:Name="CloseBtn" Click="CloseBtn_Click" IsEnabled="{Binding IsCloseEnabled}"
HorizontalAlignment="Right" Style="{StaticResource TopButton}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Height="30" Width="30" Source="{StaticResource CloseIcon}" />
<Label Foreground="Black">Close</Label>
</StackPanel>
</Button.Content>
</Button>
它的样式是这样的:
<Style x:Key="TopButton" TargetType="{x:Type Button}">
<Setter Property="Padding" Value="10,5" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="TextBlock.Foreground" Value="#FFADADAD"/>
</Trigger>
</Style.Triggers>
</Style>
然而,当绑定 "IsCloseEnabled" returns 为 false 时,按钮看起来不像被禁用——颜色“#FFADADAD”未应用于前景。不知道哪里出错了。
您的 Label 的硬设置值为 Foreground="Black",它将覆盖您尝试通过触发器应用的任何其他颜色。删除 "Foreground=Black" 并查看是否可以解决您的问题。
更新 #2:如果您还想控制图像看起来已禁用,最好让图像源由一种样式控制,用 "disabled" png 替换源。像这样:
<Button x:Name="CloseBtn" Click="CloseBtn_Click" IsEnabled="{Binding IsCloseEnabled}" HorizontalAlignment="Right" Style="{StaticResource TopButton}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image x:Name="myImage" Height="30" Width="30">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{StaticResource CloseIcon}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsCloseEnabled}" Value="False">
<Setter Property="Source" Value="{StaticResource CloseIconDisabled}"/>
</DataTrigger>
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Label>Close</Label>
</StackPanel>
</Button.Content>
</Button>