我在资源词典中有以下样式
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Rectangle Fill="#262626" Name="Normal"/>
<Rectangle Fill="#3f3f41" Name="Hover" Visibility="Hidden"/>
<Rectangle Fill="#007acc" Name="Pressed" Visibility="Hidden"/>
<Image Name="Icon"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Hover" Property="Visibility" Value="Visible"/>
<Setter TargetName="Pressed" Property="Visibility" Value="Hidden"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
<Setter TargetName="Hover" Property="Visibility" Value="Hidden"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
我需要从我的按钮(在我的MainWindow.xaml内)更改名称为“Icon”的图像的“Source”
<Button Style="{StaticResource ToolbarButton}">
<Setter TargetName="Icon" Property="Source" Value=".png"/>
</Button>
但它给我的错误是“来源未被识别或无法访问”
如何从按钮更改名称为“Icon”的图像的“Source”属性?
答案 0 :(得分:2)
WPF控件实际上是在行为中运行的。按钮不是为了拥有图像。虽然按钮是Contentcontrol,但您可以将任何内容放在Button的内容中。
<Button>
<image ... />
</Button
在上面的风格中你可以使用:
<Grid>
<Rectangle Fill="#262626" Name="Normal"/>
<Rectangle Fill="#3f3f41" Name="Hover" Visibility="Hidden"/>
<Rectangle Fill="#007acc" Name="Pressed" Visibility="Hidden"/>
<Image Name="Icon" Source="{TemplateBinding Tag}" />
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Hover" Property="Visibility" Value="Visible"/>
<Setter TargetName="Pressed" Property="Visibility" Value="Hidden"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Pressed" Property="Visibility" Value="Visible"/>
<Setter TargetName="Hover" Property="Visibility" Value="Hidden"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
现在,您可以在Button的Tag属性中指定Source
但这不是一种正确的方法。您应该将TemplateBinding用于支持控件行为的属性。就像TemplateBinding to Background一样,按钮支持它,而按钮不支持Image。
如果您还有其他需要,请告诉我。