首先,我想表达这么多的代码,但是英语不是我的母语,所以我会尽可能详细地介绍细节,并希望您能理解我的问题所在。
我也在20天前才开始学习C#,所以我的错误可能是一些基本的新手错误:)
无论如何,我的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" });
}
以上代码不起作用,也没有错误,Button Background根本不变。 调试时:
newColor是(#FFFF8000)
valuePLU为(-32768)
背景为{#FFFFFFFF}-创建按钮时自动分配的默认颜色。
但是,如果我将Button(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不是正确的类型?
答案 0 :(得分:1)
我发现,问题出在XAML(Background="{Binding Color}"
)和构造函数(public SolidColorBrush Background { get; set; }
)中。
为使其正常工作,在XAML中应为({Background="{Binding Background}
)“
正如我所说,这可能是菜鸟错误:)
谢谢大家!