Назначить цвет кнопки при создании кнопки (время выполнения) - PullRequest
0 голосов
/ 20 октября 2018

Сначала я хочу извиниться за столько кода, но английский не является моим родным языком, поэтому я привел как можно больше подробностей и надеюсь, что вы поймете, в чем моя проблема.

Также я простоЯ начал изучать 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 неправильного типа?

1 Ответ

0 голосов
/ 20 октября 2018

Я понял, проблема была в XAML (Background="{Binding Color}") и Конструкторе (public SolidColorBrush Background { get; set; }).

Чтобы это работало правильно, в XAML должно быть (Background="{Binding Background}) "

Как я уже сказал, это, вероятно, ошибка нуба:)

Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...