2016-06-08 3 views
4

Это мой 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

Является ли это каким-то образом сталкиваясь с TextBlockStyle? Поскольку применяется FontWeight, похоже, что есть соединение?!

Примечание:

только "очевидно" различие, которое я вижу, что Binding отличается:

Day + Year является Collection из Integers в то время как Month является Collection из string?!

+0

Являются ли день и год ComboBox недоступными для редактирования и редактируются месяцем? – nkoniishvt

+0

@nkoniishvt Я не использую CodeBehind (только MVVM), поэтому все, что я модерировал по стилям/поведению, это то, что вы видите в xaml! –

ответ

2

Это связано с типом данных, а также тот факт, что вы не определили способ отображения данных: ItemTemplate, ItemTemplateSelector или StringFormat

Если добавить <Setter Property="ItemStringFormat" Value="{}{0}"></Setter>

Все ComboBoxes будет отображаться корректно.

ItemsControl.UpdateSelectionBoxItem - это функция, которая отвечает за отображение данных в окне выбора, но я не мог понять, как он обрабатывал int по-разному от String в процессе извлечения и отображения Item.

В любом случае, int отображаются как TextBlocks и String как TextBox, если я правильно понимаю, и именно поэтому вы int берете ваш стиль.

+0

, которая решила его: D благодарит кучу –

+0

@nk oniishvt Действительно полезно .. спасибо –

-1

Может быть, вы могли бы попробовать что-то вроде этого:

<Window.Resources> 
    <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
     <Setter Property="Margin" Value="5" /> 
    </Style> 
    <Style TargetType="ComboBox" BasedOn="{StaticResource CommonStyle}"> 
    </Style>  
</Window.Resources> 
Смежные вопросы