如何在WPF中创建常见的IconButton

时间:2012-11-15 03:20:23

标签: wpf wpf-controls

这是我的情况, 创建一个通用图标按钮,可以随时使用不同的图标。

以下是我的步骤:

1)。创建一个从Button派生的自定义IconButton,它有一个DefaultImageSource依赖属性。这里是:

public class IconButton : Button
{
    public static readonly DependencyProperty DefaultImageSourceProperty =
       DependencyProperty.Register("DefaultImageSource", typeof(ImageSource), typeof(IconButton), new FrameworkPropertyMetadata(null));//, new FrameworkPropertyMetadata(OnImageSourceChanged));

    public ImageSource DefaultImageSource
    {
        get { return (ImageSource)GetValue(DefaultImageSourceProperty); }
        set { SetValue(DefaultImageSourceProperty, value); }
    }
}

2)。在项目资源中为IconButton创建一个样式,以便使用此样式的IconButton


        <Style x:Key="IconButtonTemplate" TargetType="{x:Type WpfApplication3:IconButton}">                
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type WpfApplication3:IconButton}">
                        <Grid>
                            <Image Source="{Binding RelativeSource={RelativeSource Self}, Path=DefaultImageSource}"  Stretch="Uniform" Width="Auto" Height="Auto" x:Name="imageArt"/>
                            <Ellipse x:Name="focusEllipse" Fill="Transparent"/>
                        </Grid>
                        <ControlTemplate.Triggers>                                
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="focusEllipse" Property="Fill" Value="#AAFFFFFF"/>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter TargetName="focusEllipse" Property="Fill" Value="#AA808080"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="focusEllipse" Property="Fill" Value="#80808080"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

3)。在我的WPF窗口中创建多个IconButton,并将它们绑定到不同的图标,但没有运气;打开此窗口时,图标不会显示,


<Grid>

    <DockPanel>

        <WpfApplication3:IconButton Width="30" Height="30" DefaultImageSource="{DynamicResource RefreshIcon}" Style="{DynamicResource IconButtonTemplate}"></WpfApplication3:IconButton>

        <WpfApplication3:IconButton Width="30" Height="30" DefaultImageSource="{DynamicResource RunIcon}" Style="{DynamicResource IconButtonTemplate}"></WpfApplication3:IconButton>
    </DockPanel>
</Grid>

可能是图像资源的错误绑定问题,但无法通过多次尝试找出问题。有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:2)

我可以在Binding中看到这个问题。使用

 <Image Source="{Binding RelativeSource={RelativeSource Self}, Path=DefaultImageSource}"  Stretch="Uniform" Width="Auto" Height="Auto" x:Name="imageArt"/>

使用自我模式,您尝试将来源绑定到图像控件的 DefaultImageSource 属性。并且图像没有任何此类属性如此轰动。

试试这个

 <Image Source="{TemplateBinding DefaultImageSource}"  Stretch="Uniform" Width="Auto" Height="Auto" x:Name="imageArt"/>

这会尝试将图片来源绑定到按钮 DefaultImageSource 属性。

我希望这会有所帮助。