0

我正在为联系人列表写头像。设计是这样的,如果我能得到联系人的图像然后我显示图像。如果不是,我需要用随机颜色显示姓氏的大写字母。我知道如何显示圆形图像

<Button>
    <Button.Content>
        <Ellipse>
             <Ellipse.Fill>
                 <ImageBrush ImageSource="{Binding Image}"/>
             </Ellipse.Fill>
         </Ellipse>
     </Button.Content>
</Button>

我想知道显示那些没有图像的方向是什么,我必须显示姓氏字母并用随机颜色填充椭圆。我的想法是在 Image 的 getter 中编写一些条件代码来决定显示什么。但是如何制作具有给定字母和随机颜色的图像。

4

1 回答 1

3

您总是可以继续在代码中生成所需的图像,但这可能会变得不必要地复杂。

我会建议一个更简单的方法

<Button>
    <Button.Content>       
        <Grid>
            <Ellipse Fill="{x:Bind FillBrush}"/>
            <TextBlock Text="{x:Bind Initials}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
     </Button.Content>
</Button>

在您的 ViewModel 中,您将拥有如下内容:

public Brush FillBrush { get; set; }
public string Initials { get; set; }

以及一些逻辑来弄清楚如何填充这些属性。如果您有图像,请将 Initials 属性留空,并将 FillBrush 设置为 ImageBrush。如果您没有图像,请将 FillBrush 设置为使用随机颜色初始化的新 SolidColorBrush,并将 Intials 设置为正确的值。

*您当然需要为 TextBlock 设置正确的样式并在 ViewModel 中引发正确的 NotifyPropertyChanged 事件。

**如果您可以仅生成与您为 TextBlock 选择的任何前景一起使用的随机背景颜色,或者根据所需的设计,根据随机背景颜色选择白色或黑色前景,则可获得奖励积分。

我认为这将比在您还没有图像时生成图像更容易编码和维护并且在运行时更快。

于 2016-06-08T18:09:27.643 回答