在创建按钮期间分配按钮颜色(运行时)

时间:2018-10-20 09:53:09

标签: c# wpf

首先,我想表达这么多的代码,但是英语不是我的母语,所以我会尽可能详细地介绍细节,并希望您能理解我的问题所在。

我也在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不是正确的类型?

1 个答案:

答案 0 :(得分:1)

我发现,问题出在XAML(Background="{Binding Color}")和构造函数(public SolidColorBrush Background { get; set; })中。

为使其正常工作,在XAML中应为({Background="{Binding Background})“

正如我所说,这可能是菜鸟错误:)

谢谢大家!