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新手,所以我还没有真正学会如何使用“自定义控件”,但我会检查一下。谢谢