Защо моят стил ListBoxItem се нулира при промяна на съдържанието?

Имам списъчно поле с 2 елемента от списъчно поле:

<ListBox Name="Monday" HorizontalAlignment="Left" Height="65.125" Margin="78,45.625,0,0" VerticalAlignment="Top" Width="139" Style="{DynamicResource monday}" MouseUp="Monday_MouseUp">
    <ListBoxItem Name="MondayLB1" Content="24" HorizontalAlignment="Center" Margin="0,20,0,0" FontSize="20" Height="22" Foreground="White" Focusable="False">
    </ListBoxItem>
    <ListBoxItem Content="Февраль" HorizontalAlignment="Center" VerticalAlignment="Bottom" Foreground="White" Focusable="False">
    </ListBoxItem>
</ListBox>

Когато променя съдържанието на listboxitem в код като този:

    listik[tmp].Items[0] = localDateTime.Day.ToString();

Стилът на моите списъчни елементи се нулира - размери на шрифта, преден план на шрифта, подравняване - обръщане към стандартните

Какво трябва да направя?


person Vadym K    schedule 03.02.2014    source източник
comment
Не манипулирайте UI елементи в процедурния код в WPF. Вместо това използвайте DataBinding и няма да имате тези проблеми.   -  person Federico Berasategui    schedule 03.02.2014
comment
имате предвид да зададете свойствата на съдържанието на listboxitem по този начин: MainWindow.Monday.Content = dadasd ???   -  person Vadym K    schedule 03.02.2014
comment
Имам предвид Използване на DataBinding . Изглежда имаш много за четене.   -  person Federico Berasategui    schedule 03.02.2014


Отговори (1)


Тъй като правите процедурен код и е толкова трудно да не използвате повторно всеки стил, който лесно имате, предлагам да прочетете повече за DataBinding. Но заради въпроса ви, ето какво се случва.

Причината, поради която стилът ви на вашите listbox елементи се нулира, е, че заменяте действителния елемент, който е ListBox, и го присвоявате само със стойност string, така че изходът на списъчната кутия ще има само стойността string, която няма нищо в което след това просто го преобразува в нормална Textblock контрола вътре.

listik[tmp].Items[0] = localDateTime.Day.ToString();

Променете го така

Monday.Items[0] = new ListBoxItem()
            {
                Content = localDateTime.Day.ToString(),
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Bottom,
                Foreground = new SolidColorBrush(Colors.White),
                Height= 22,
                Focusable = false
            };

Или можете да дефинирате style за вашия listboxitem, след което да зададете новия стил на ListBoxItem на новосъздадения стил.

person 123 456 789 0    schedule 03.02.2014