Сначала я хочу извиниться за столько кода, но английский не является моим родным языком, поэтому я привел как можно больше подробностей и надеюсь, что вы поймете, в чем моя проблема.
Также я простоЯ начал изучать C # 20 дней назад, поэтому моя ошибка, вероятно, будет некоторой основной ошибкой новичка :)
В любом случае, у меня есть форма WPF с несколькими сетками, и в одной из таблиц есть:
<Grid Grid.Column="2" Grid.Row="1" Name="grdPLUPanel" >
<ItemsControl x:Name="btnPLUList">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="4" Margin="0"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content ="{Binding Content}" Height="{Binding Height}" Width="{Binding Width}" Tag="{Binding Tag}" Margin="{Binding Margin}" Background="{Binding Color}" FontSize="{Binding FontSize}" FontWeight="Medium" HorizontalAlignment="Center" Click="ClickHandlerGrp" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
Все эти привязки работают отлично, за исключением Background = "{Binding Color}".
Код для назначения цвета, который я получаю из базы данных, как int (то есть. -32768), затем преобразование в шестнадцатеричное (# FFFF8000) и добавление в фон:
if (dictPLU.ContainsKey(Convert.ToString(i)))
{
GetPLURowsFromDB.MyObject valuePLU = dictPLU[Convert.ToString(i)];
byte[] bytes = BitConverter.GetBytes(valuePLU.btnColor);
var newColor = new SolidColorBrush(Color.FromArgb(bytes[3], bytes[2], bytes[1], bytes[0]));
btns.Add(new TodoItem() { Content = valuePLU.btnContent, Height = btnMinimumHeightSize, Width = btnMinimumWidthSize, FontSize = fntSize, Tag = valuePLU.btnPLUID, Background = newColor, Margin = "1," + separationX + ",0,0" });
}
else
{
btns.Add(new TodoItem() { Content = "", Height = btnMinimumHeightSize, Width = btnMinimumWidthSize, Tag = "PLU" + Convert.ToString(i), Margin = "1," + separationX + ",0,0" });
}
Выше код не работает, также нет ошибок, фон кнопки просто не изменяется.При отладке:
newColor равен (# FFFF8000)
valuePLU равен (-32768)
Фон равен {#FFFFFFFF} - цвет по умолчанию, назначаемый автоматически при создании кнопок.
Однако, если я вручную наденю кнопку (btnRcptESC) на форму и использую следующий код:
private void MainWindowView_OnLoaded(object sender, RoutedEventArgs e)
{
byte[] bytes = BitConverter.GetBytes(Convert.ToInt32("-32768"));
var colorNew = new SolidColorBrush(Color.FromArgb(bytes[3], bytes[2], bytes[1], bytes[0]));
btnRcptESC.Background = colorNew;
}
Кнопка изменит цвет.
Я подозреваюэта проблема в конструкторе "public SolidColorBrush Background { get; set; }"
Может быть, SolidColorBrush неправильного типа?