Почему свойство фона Canvas является общим "SolidColorBrush" вместо фактического цвета?

Я хочу ответить на нажатие на холст и сохранить значение фона холста в настройках приложения, чтобы я мог присвоить это значение панели инструментов / панели инструментов. Итак, у меня есть этот 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>

..и обработчик:

private void CanvasColor_Tapped(object sender, TappedRoutedEventArgs treArgs)
{
    if (sender is Canvas)
    {
        Brush colour = ((Canvas)sender).Background;
        String brushColorAsStr = colour.ToString();
        IAppSettings appSettings;
        if (App.SaveSettingsLocally)
        {
            appSettings = new AppSettingLocal();
        }
        else
        {
            appSettings = new AppSettingsRoaming();
        }
        appSettings.SaveSetting(VisitsConsts.APP_BAR_COLOR_SETTING, brushColorAsStr);
    }
}

Тем не менее, значение 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;

2 ответа

Решение

Расширяя ответ на SLaks:

Пример:

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

Обратите внимание, что это работает, потому что вы устанавливаете по умолчанию один сплошной цвет. Вот почему это SolidColorBrush, Вы можете установить любой вид кисти, линейного градиента, текстуры или что угодно. По понятным причинам приведенный выше код не будет работать, если вы установите что-либо, кроме сплошной кисти одного цвета.

Так как SolidColorBrush не переопределяет ToString(),

Чтобы извлечь этот фактический цвет, приведите его к SolidColorBrush и использовать Color имущество.

Другие вопросы по тегам