在WPF/XAML中实现带有图标的工具栏

3
在我的基于桌面的WPF应用程序中,我想实现一个工具栏,其中包含关键操作(添加、更新、删除等),类似于您可以在任何Web界面邮件服务中看到的内容。
为了做到这一点,我有一个大的PNG图像,其中包含所有可能的图标(常规、活动、禁用等)。
如何显示不是整个图像,而只是一个区域。例如,在我的图标是正方形且具有50px边长的情况下,从像素50到像素100?换句话说,如果所有图标都放置在一个大的PNG图像中,您会建议如何在WPF中实现选择图像子部分以显示在工具栏按钮内?
附言:在Web开发中,通常使用一个包含所有图标的大型PNG图像,当您想要放置特定图标时,必须定义要显示的图像中的哪个区域。
3个回答

4
这真的不是 WPF 中管理图像资源的正确方式,如果您这样做,将会与平台的自然机制相抗衡。您应该考虑拆分图像,然后将每个图像分配给视图中的资源。然后您可以在 UI 中绑定每个图像,并将其显示为 Image 或 Brush 的源。如果您想将它们保留为一个大图像,您可能可以使用 TileBrush 来选择它们并仅显示您想要的图像区域。

1

您可以使用ImageBrush将按钮的背景设置为您的图像。 将TileMode设置为None,并将ViewboxUnits设置为Absolute。 然后,您可以将Viewbox设置为适当的区域。 您可以绑定属性以动态更改图像,或者如果它是静态图像,则直接设置值。

<Button Width="80" Height="80">
    <Button.Background>
        <ImageBrush ImageSource="..." TileMode="None" ViewboxUnits="Absolute">
            <ImageBrush.Viewbox>
                <Rect Size="80,80" X="{Binding ...}" />
            </ImageBrush.Viewbox>
        </ImageBrush>
    </Button.Background>
</Button>

我同意,这不是最有效地利用资源的方式,但是以下是实现方法。


1

你可能想要查看BitmapImage类(你的图像源)上的SourceRect属性

然而,我认为codekaizen是对的,这可能不是正确的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接