C# 将自定义属性绑定到WPF中的模板
我想为按钮创建一个模板,它将显示一个图像(图标)而不是文本C# 将自定义属性绑定到WPF中的模板,c#,wpf,xaml,C#,Wpf,Xaml,我想为按钮创建一个模板,它将显示一个图像(图标)而不是文本 我希望能够将不同的图像分配给该按钮的不同实例,例如: <Button Style="{StaticResource iconButton}" ImageSource="Sources/icon.png"> 或者: <Button Style="{StaticResource iconButton}"> <Image Source="..."> </Button> (但我
我希望能够将不同的图像分配给该按钮的不同实例,例如:
<Button Style="{StaticResource iconButton}" ImageSource="Sources/icon.png">
或者:
<Button Style="{StaticResource iconButton}">
<Image Source="...">
</Button>
(但我仍然希望能够在模板中设置图像的样式,这样我在使用它时就不需要担心颜色和大小了,所以简单地将图像作为内容渲染是不行的)
示例代码:
在这里,我使用图像作为遮罩,以我想要的任何颜色渲染它:
<Style TargetType="Button" x:Key="iconButton">
<Style.Resources>
<!-- add the "content to image source" converter-->
<converters:ContentToImageSourceConverter x:Key="ContentToImageSourceConverter"/>
</Style.Resources>
<Setter Property="Foreground" Value="{DynamicResource foreground_color}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid Margin="5">
<Ellipse x:Name="circle" Width="45" Height="45" Fill="{DynamicResource foreground_color}" Opacity="0"/>
<Ellipse Width="45" Height="45" Fill="{DynamicResource foreground_color}">
<Ellipse.OpacityMask>
<!--How to accomplish this?-->
<ImageBrush ImageSource="{TemplateBinding Property=Content "/>
</Ellipse.OpacityMask>
</Ellipse>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="circle" Property="Opacity" Value="0.15"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="circle" Property="Opacity" Value="0.3"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
看一看上面写着“如何实现这一点”的那句话。我使用图像作为源,但我希望在使用按钮时定义图像,例如:
<Button Style="{StaticResource iconButton}" DockPanel.Dock="Right">
<Image Source="/Sources/settings_icon.png"/>
</Button>
我不想简单地将图像渲染为按钮的内容,因为我将其用作其他内容的遮罩,因此我可以更改前景颜色,并使图标以不同的颜色渲染 我将使用图像源的一个依赖属性执行自定义控件。你试过这个吗 然后你会像这样使用它
<MyCustomButton DockPanel.Dock="Right" ImageSource = Sources/settings_icon.png">
</MyCustomButton>
嘿,我是WPF新手,所以我还没有真正学会如何使用“自定义控件”,但我会检查一下。谢谢