如何从 RGB 颜色创建 WPF 图像?

发布于 2024-11-02 15:35:15 字数 924 浏览 0 评论 0原文

我的 Layer 对象有一些颜色显示在 TreeView 中。现在我使用这样的东西:

<GridViewColumn Width="300">
    <GridViewColumnHeader Content="Layers" />
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <StackPanel MouseLeftButtonDown="Layers_MouseLeftButtonDown" Orientation="Horizontal">
                <Image Width="15"
                        Height="15"
                        Source="{Binding ImageFromColor}" />
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

原始颜色值将从Layer本身访问(绑定),就像:

layer.Color

System.Drawing.Color类型。但如果能让事情变得更容易的话,我可以将类型更改为其他类型。

在性能和优雅方面做到这一点的最佳方法是什么?

我将拥有几千个 TreeView 项目,它们会产生影响。

I have some colors for my Layer objects that are shown in a TreeView. Right now I use something like this:

<GridViewColumn Width="300">
    <GridViewColumnHeader Content="Layers" />
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <StackPanel MouseLeftButtonDown="Layers_MouseLeftButtonDown" Orientation="Horizontal">
                <Image Width="15"
                        Height="15"
                        Source="{Binding ImageFromColor}" />
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

The original color values are gonna be accessed (binded) from the Layer itself, so like:

layer.Color

of type System.Drawing.Color. But I can change the type to be something else if it would make things easier.

What's the best way to do this in terms of performance and elegance?

I will have a couple thousand TreeView items it that makes a difference.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

听闻余生 2024-11-09 15:35:15

我自己没有尝试使用 TreeView(仅使用 ListBox),但也许这值得一试:

<DataTemplate>
    <!-- your additional container -->
        <Canvas Width="15" Height="15">
             <Canvas.Background>
                 <SolidColorBrush Color="{Binding Path=ColorProperty}" />
             </Canvas.Background>
        </Canvas>
    <!-- end of container -->
</DataTemplate>

这种方法使用直接绑定到颜色属性,因此不需要创建图像(例如通过转换器)。

但绝对建议尝试一下,看看它是否适用于数千个项目。

I did not try it myself with a TreeView (only with a ListBox), but maybe this is worth a try:

<DataTemplate>
    <!-- your additional container -->
        <Canvas Width="15" Height="15">
             <Canvas.Background>
                 <SolidColorBrush Color="{Binding Path=ColorProperty}" />
             </Canvas.Background>
        </Canvas>
    <!-- end of container -->
</DataTemplate>

This approach uses a direct binding to the color property, so no images need to be created (e.g. by a Converter).

But it is definitely recommended to try it out to see if it works with thousands of items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文