【问题标题】:Why my ListBoxItem style reset on changing content?为什么我的 ListBoxItem 样式会在更改内容时重置?
【发布时间】:2014-02-03 19:37:23
【问题描述】:

我有一个包含 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();

我的列表框样式重置 - 字体大小、字体前景、对齐方式 - 转为默认值

我必须做什么?

【问题讨论】:

  • 不要在 WPF 的过程代码中操作 UI 元素。改为使用 DataBinding,您将不会遇到这些问题。
  • 你的意思是像这样设置列表框内容属性: MainWindow.Monday.Content = "dadasd" ???
  • 我的意思是Use DataBinding。看来你有很多阅读要做。

标签: c# wpf listbox listboxitem


【解决方案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
            };

或者您可以为您的listboxitem 定义一个style,然后将新ListBoxItem 的样式设置为新创建的样式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多