C# 为什么画布是';背景属性a“通用”;SolidColorBrush“;而不是实际的颜色?

C# 为什么画布是';背景属性a“通用”;SolidColorBrush“;而不是实际的颜色?,c#,background,windows-store-apps,brush,solidcolorbrush,C#,Background,Windows Store Apps,Brush,Solidcolorbrush,我想响应画布上的点击,并将画布背景的值存储在应用程序设置中,以便将该值分配给AppBar/命令栏。我在用户控件中有一个XAML: <StackPanel Orientation="Horizontal"> <Canvas Background="Aqua" Width="20" Height="20" VerticalAlignment="Center" Tapped="CanvasColor_Tapped"></Canvas> <Tex

我想响应画布上的点击,并将画布背景的值存储在应用程序设置中,以便将该值分配给AppBar/命令栏。我在用户控件中有一个XAML:

<StackPanel Orientation="Horizontal">
    <Canvas Background="Aqua" Width="20" Height="20" VerticalAlignment="Center" Tapped="CanvasColor_Tapped"></Canvas>
    <TextBlock Text="Aqua" VerticalAlignment="Center" Tapped="CanvasColor_Tapped" ></TextBlock>
</StackPanel>
然而,brushColorAsStr的值只是“Windows.UI.XAML.Media.SolidColorBrush”(我希望它类似于“Magenta”或“Windows.UI.XAML.Media.SolidColorBrush.Magenta”)

如何获得背景的实际值而不仅仅是其类型

更新 我不知道如何实现SLaks的答案;我试过:

Brush brsh = ((Canvas) sender).Background;
//var color = (SolidColorBrush)brsh.
//var color = ((SolidColorBrush) sender).Color;
//var color = (SolidColorBrush).((Canvas)sender).Color;

因为
SolidColorBrush
不会覆盖
ToString()


要提取实际颜色,请将其强制转换为
SolidColorBrush
并使用
color
属性。

因为
SolidColorBrush
不会覆盖
ToString()


要提取实际颜色,请将其转换为
solidcolorbush
,并使用
color
属性。

展开SLaks回答:

例如:

var canvas = sender as Canvas;
var brush = canvas.Background as SolidColorBrush;
var color = brush.Color;

请注意,这是因为您设置了单一纯色的默认值。这就是为什么它是一个
SolidColorBrush
。您可以将其设置为任何类型的笔刷、线性渐变、纹理或任何您喜欢的。出于显而易见的原因,如果您只设置了单色纯色笔刷,则上述代码将不起作用。

在SLaks上展开回答:

例如:

var canvas = sender as Canvas;
var brush = canvas.Background as SolidColorBrush;
var color = brush.Color;
请注意,这是因为您设置了单一纯色的默认值。这就是为什么它是一个
SolidColorBrush
。您可以将其设置为任何类型的笔刷、线性渐变、纹理或任何您喜欢的。出于明显的原因,如果您只设置了单色纯色笔刷,则上述代码将不起作用