2016-02-09 1 views
0

В моем проекте Windows 8.1 у меня есть поле со списком со специальным стилем, чтобы я мог изменить цвет переднего плана текста заполнителя.Изменить цвет текста заполнителя при отключении combobox в WinRT XAML

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

Изменение ComboBoxDisabledForegroundThemeBrush влияет только на фактический текст в поле со списком, а не на текст заполнителя, и я не вижу никакого способа управления передним планом PlaceholderTextBlock для разных визуальных состояний.

Может ли цвет текста заполнитель обладать визуальным состоянием?

<Style x:Key="MyCustomStyle" TargetType="ComboBox"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="ComboBox"> 
     <Grid> 
      <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Disabled"> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Background"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ComboBoxDisabledBackgroundThemeBrush}"/> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="Background"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ComboBoxDisabledBorderThemeBrush}"/> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ComboBoxDisabledForegroundThemeBrush}"/> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DropDownGlyph"> 
        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ComboBoxArrowDisabledForegroundThemeBrush}"/> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      ... 
      <ContentPresenter x:Name="ContentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" Grid.Row="1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
      <TextBlock x:Name="PlaceholderTextBlock" Foreground="#FFAAAAAA" FontWeight="Normal" Text="{TemplateBinding PlaceholderText}"/> 
      </ContentPresenter> 

ответ

3

Щетка вы ищете назван ComboBoxPlaceholderTextForegroundThemeBrush под стиль ComboBox «s.

..... 
<ContentPresenter x:Name="ContentPresenter" 
       HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
       Margin="{TemplateBinding Padding}" 
       Grid.Row="1" 
       VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
    <TextBlock x:Name="PlaceholderTextBlock" 
       Foreground="{ThemeResource ComboBoxPlaceholderTextForegroundThemeBrush}" 
       FontWeight="{ThemeResource ComboBoxPlaceholderTextThemeFontWeight}" 
       Text="{TemplateBinding PlaceholderText}" /> 
</ContentPresenter> 
.... 

Вы можете отдельно отрегулировать замещающий передний план, как этот

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" 
           Storyboard.TargetName="PlaceholderTextBlock"> 
    <DiscreteObjectKeyFrame KeyTime="0" 
          Value="Black" /> 
</ObjectAnimationUsingKeyFrames> 
+0

Я хотел бы сохранить пользовательский цвет переднего плана, указанный в исходном сообщении, но хочу, чтобы иметь возможность контролировать отключенный цвет переднего плана. – jkh

+1

Я обновил ответ. –