Почему свойство фона 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
имущество.