样式未正确应用

3

这是我的Xaml

<Style TargetType="ComboBox">
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Foreground" Value="Black" />
    <Setter Property="Margin" Value="5" />
</Style>
<Style TargetType="TextBlock">
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="Margin" Value="5" />
    <Setter Property="FontSize" Value="20" />
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="Foreground" Value="White" />
</Style>
<Style TargetType="TextBox">
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Margin" Value="5" />
    <Setter Property="Height" Value="35" />
    <Setter Property="FontSize" Value="20" />
</Style>
[...]
<ComboBox SelectedIndex="{Binding Path=BirthdayDay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}" ItemsSource="{Binding Path=Days, UpdateSourceTrigger=PropertyChanged}" />
<ComboBox SelectedIndex="{Binding Path=BirthdayMonth, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}" ItemsSource="{Binding Path=Months, UpdateSourceTrigger=PropertyChanged}" />
<ComboBox SelectedIndex="{Binding Path=BirthdayYear, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}" ItemsSource="{Binding Path=Years, UpdateSourceTrigger=PropertyChanged}" />

结果非常混乱:

enter image description here

它是否与TextBlock Style发生了冲突?因为应用了FontWeight,似乎存在关联?!

注意:

我唯一看到的“明显”区别是绑定不同:

Day + Year是一个整数集合,而Month是一个字符串集合?!


日和年的ComboBox不可编辑,而月份可编辑吗? - nkoniishvt
@nkoniishvt 我不使用 CodeBehind(只用 MVVM),所以我在 Styles/Behaviour 上修改的就是你在 xaml 中看到的! - Felix D.
2个回答

2
这是由于数据类型以及您没有定义一种显示数据的方式:ItemTemplate、ItemTemplateSelector或StringFormat。
如果您添加<Setter Property="ItemStringFormat" Value="{}{0}"></Setter>,所有的ComboBox都将正确显示。
ItemsControl.UpdateSelectionBoxItem函数负责在选择框中显示数据,但我无法弄清它在提取和显示项时如何区分int和String。
不管怎样,如果我没理解错的话,int会被显示为TextBlock,而String会被显示为TextBox,这就是为什么int采用了您的样式。

-1
也许你可以试试像这样的代码:
<Window.Resources>
    <Style x:Key="CommonStyle" TargetType="FrameworkElement">
        <Setter Property="Margin" Value="5" />
    </Style>
    <Style TargetType="ComboBox" BasedOn="{StaticResource CommonStyle}">
    </Style>       
</Window.Resources>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接