2016-10-19 2 views
0

я взял в качестве модели this решения, которое работает должным образом:TextBox светящегося при фокусировке, но всегда темно

<Style x:Key="stlFocusGlowingTextBox" TargetType="{x:Type TextBox}"> 
    <Setter Property="Background" Value="Transparent" /><--------HERE 
     <Setter Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect ShadowDepth="0" Color="Yellow" Opacity="0" BlurRadius="20"/> 
       </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Trigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation To="1.0" Storyboard.TargetProperty="(Effect).Opacity" Duration="00:00:00"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation To="0.0" Storyboard.TargetProperty="(Effect).Opacity" Duration="00:00:02"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.ExitActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

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

enter image description here

Спасибо заранее за любую помощь Патрик

+0

Можете ли вы опубликовать все свои xaml? – Rom

+2

Для таких проблем, я настоятельно рекомендую использовать snoop для его отладки: http://snoopwpf.codeplex.com/. Snoop позволяет выполнять поиск по вашему визуальному дереву и изменять свойства, такие как 'Background' во время выполнения. – GEEF

+0

@Rom Я не могу сделать это слишком долго, но могу сказать, что когда я его применяю, это просто: Patrick

ответ

0

Если вы хотите, чтобы фон родительского контроля вы можете сделать так:

<Window x:Class="GlowingTextBox.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:GlowingTextBox" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel Background="WhiteSmoke"> <!-- The parent with the background color you want for your text box --> 
    <TextBox Width="200" VerticalAlignment="Center" HorizontalAlignment="Center" Name="MyText"> 
     <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Margin" Value="20" /> 
      <!-- Bind the bacground to the stackpanel --> 
      <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}, Path=Background}" /> 
      <Setter Property="Effect"> 
      <Setter.Value> 
       <DropShadowEffect ShadowDepth="0" Color="Yellow" Opacity="0" BlurRadius="20"/> 
      </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation To="1.0" Storyboard.TargetProperty="(Effect).Opacity" Duration="00:00:00"/> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation To="0.0" Storyboard.TargetProperty="(Effect).Opacity" Duration="00:00:02"/> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.ExitActions> 
      </Trigger> 
      </Style.Triggers> 
     </Style> 
     </TextBox.Style> 
    </TextBox> 
    <TextBox /> 
    </StackPanel> 
</Window> 

EDIT: В выше Я установил фон текстового поля для ссылки на фон стека, который является родительским для текстового поля. Кажется, что когда вы используете dropshadoweffect, он светит через текстовое поле, если оно имеет размер рамки, прозрачный. Так что если вы хотите, чтобы текстовое поле, чтобы иметь один и тот же фон, как его родитель (здесь StackPanel) вы ссылаетесь как <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}, Path=Background}" />

Если вы хотите, чтобы текстовое поле, чтобы иметь свой собственный фон вы это сделать:

<Window x:Class="GlowingTextBox.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:GlowingTextBox" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <StackPanel Background="WhiteSmoke"> 
    <TextBox Width="200" VerticalAlignment="Center" HorizontalAlignment="Center" Name="MyText"> 
     <TextBox.Style> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Margin" Value="20" /> 
      <Setter Property="Background" Value="White" /> 
      <Setter Property="Effect"> 
      <Setter.Value> 
       <DropShadowEffect ShadowDepth="0" Color="Yellow" Opacity="0" BlurRadius="20"/> 
      </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Trigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation To="1.0" Storyboard.TargetProperty="(Effect).Opacity" Duration="00:00:00"/> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.EnterActions> 
       <Trigger.ExitActions> 
       <BeginStoryboard> 
        <Storyboard> 
        <DoubleAnimation To="0.0" Storyboard.TargetProperty="(Effect).Opacity" Duration="00:00:02"/> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.ExitActions> 
      </Trigger> 
      </Style.Triggers> 
     </Style> 
     </TextBox.Style> 
    </TextBox> 
    <TextBox /> 
    </StackPanel> 
</Window> 

EDIT: Здесь фон текстового поля установлен в белый цвет в стиле, чтобы он был равнодушным к основным цветам.

+0

Я мог бы быть немым, но ... что отличает то, что я сейчас использую? Вы просто применяете стиль локально, но вы точно делаете то, что я делаю ... – Patrick

+0

@Patrick: не совсем то же самое. Пожалуйста, см. Мои EDIT выше. Вы можете легко попробовать вышеупомянутые xamls, если они решают вашу проблему. –

Смежные вопросы