我每次检查时都会尝试更改切换按钮的背景,使用2张图片。在运行时,切换按钮很简单,我看不到任何图像。这是我的代码:
<Canvas Height="25" Name="canvas1" Width="186" Background="White">
<ToggleButton Name="toggle1" Height="25" Padding="0" Width="27" Canvas.Left="131" Canvas.Top="0" BorderBrush="{x:Null}" Foreground="{x:Null}">
<ToggleButton.Resources>
<Style x:Key="OnOffToggleImageStyle" TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/WpfApp;component/Images/image1.png" Stretch="Uniform" TileMode="None" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/WpfApp;component/Images/image2.png" Stretch="Uniform" TileMode="None" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
答案 0 :(得分:3)
您可以检查图片的构建操作是否为嵌入式资源?
答案 1 :(得分:3)
我们可以在这里指出多个事项。
Style
在ToggleButton.Resources
中指定x:Key
。因此它没有隐含地设定。在其自身范围内为其应用的项目的资源设置Style
有点奇怪。而只是将Style
直接应用为<ToggleButton.Style>
。Style.Triggers
时,请务必指定默认的Setter。这可以防止你头疼。此外,现在不是为IsChecked = False / True设置两个触发器,而是只需要一个触发器,因为另一个Background
可以设置为默认值。ToggleButton
所需要的只是IsChecked
属性并切换Image
。所以只需覆盖Template
并自己提供一个简单的。通过这种方式,您可以确保行为在所有版本的操作系统中保持一致,而不依赖于内部默认模板可以很好地为您的自定义工作(这在Windows-8顺便说一下,你在这里尝试{{1}由于默认IsChecked=True
)所以把这一切放在一起我们得到:
ControlTemplate
并将其应用于您的<Style x:Key="MyToggleButtonStyle"
TargetType="ToggleButton">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/WpfApp;component/Images/image2.png"
Stretch="Uniform"
TileMode="None" />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}"
Background="{TemplateBinding Background}" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsChecked"
Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/WpfApp;component/Images/image1.png"
Stretch="Uniform"
TileMode="None" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
ToggleButton
如果您愿意,可以删除样式中的Key并使其隐式应用于Style定义范围内的“all”<ToggleButton Name="toggle1" Height="25" Padding="0" Width="27" Canvas.Left="131" Canvas.Top="0" BorderBrush="{x:Null}" Foreground="{x:Null}" Style="{DynamicResource MyToggleButtonStyle}">
。
答案 2 :(得分:2)
直接为您的togglebutton定义样式,如下所示。它应该解决你的问题:
<ToggleButton>
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/WpfApp;component/Images/image2.png" Stretch="Uniform" TileMode="None" />
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="/WpfApp;component/Images/image1.png" Stretch="Uniform" TileMode="None" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
答案 3 :(得分:2)
你应该删除x:Key,它会起作用。