2016-03-21 4 views
1

У меня есть текстовое поле, окруженное рамкой с закругленными углами. Оба они имеют одинаковый цвет фона, чтобы они отображались как единый блок ввода данных. Когда пользователь нажимает текстовое поле, фон текстового поля и цвет изменения границы. У меня это работает, когда стиль находится в моем MainWindow. Тем не менее, я пытаюсь отвлечь весь мой стиль от XAML в MainWindow до центрального ресурсного словаря. При этом я обнаружил, что DataTrigger, который меняет цвет фона на границе, не работает, из-за того, что ElementName больше не находится в области видимости (по крайней мере, я думаю, что это проблема). Я попытался упростить ситуацию, выполнив это в тестовом проекте/решении, но не может найти способ заставить триггер данных работать. У меня просто два файла XAML. Один из них - мой MainWindow, другой - словарь ресурсов. MainWindow XAML выглядит следующим образом:Как установить ElementName и Path на DataTrigger из отдельного ресурсного словаря XAML (другой файл)

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <ResourceDictionary Source="/MainSkins.xaml"/> 
    </Window.Resources> 

    <Grid HorizontalAlignment="Left" Width="307" Margin="83,0,0,0"> 
     <Border Style="{StaticResource AnimatedInputTextBoxBorder}"  
       Margin="10,76,10,151"> 
      <TextBox Name="txtTransitRoutingNumber" Style="{StaticResource 
        AnimatedInputTextBox}" 
        HorizontalAlignment="Left" Height="73" Margin="9,9,0,0" 
        TextWrapping="Wrap" Text="" 
        VerticalAlignment="Top" 
        Width="267"/> 
     </Border> 
    </Grid> 
</Window> 

А вот мой сайт Словарь, который, как я упоминается выше, в совершенно другой файл с MainWindow.xaml:

<ResourceDictionary 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:WpfApplication1"> 

    <Style x:Key="AnimatedInputTextBoxBorder" TargetType="{x:Type Border}"> 
     <Setter Property="Background" Value="#DADADA"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="Padding" Value="5"/> 
     <Setter Property="CornerRadius" Value="15"/> 
     <Setter Property="BorderBrush" Value="#DADADA"/> 
     <Style.Triggers> 

      <!--THIS DATA TRIGGER IS NOT WORKING--> 
      <DataTrigger Binding="{Binding Path=IsFocused}" Value="true"> 
       <Setter Property="Background" Value="#C2E4F6" /> 
       <Setter Property="BorderBrush" Value="#C2E4F6"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

    <Style x:Key="AnimatedInputTextBox" TargetType="{x:Type TextBox}"> 
     <Setter Property="Background" Value="#DADADA"/> 
     <Setter Property="Foreground" Value="#000000" /> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="Background" Value="#C2E4F6"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

</ResourceDictionary> 

Любая помощь будет очень ценится , поскольку я являюсь новичком, когда дело доходит до XAML.

+1

Если бы это было, я бы всю эту функциональность всего шаблона стиля TextBox и отказаться от отдельных ресурсов (и отдельные Lookups в результате этого). –

+0

Спасибо, Chris W. Это действительно помогло. С твоим предложением я смог найти работу. Я опубликую свое решение здесь, чтобы другие увидели. Спасибо Майку .... –

+0

Прохладный! Я уверен, что это было не так полезно, как пример, который я бы хотел, чтобы я успел сделать, но я рад, что вы нашли средство! –

ответ

1

Благодаря Крису У., я смог найти обходное решение, которое отлично работает. Вот решение:

<!--This style defines the animated input TextBoxes with rounded corners--> 
<Style x:Key="AnimatedTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="Background" Value="#DADADA" /> 
    <Setter Property="BorderBrush" Value="#DADADA" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="FontSize" Value="14" /> 
    <Setter Property="TextAlignment" Value="Left"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBoxBase}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="5"> 
         <ScrollViewer x:Name="PART_ContentHost" /> 
       </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsFocused" Value="True"> 
        <Setter Property="Foreground" Value="Black" /> 
        <Setter Property="Background" Value="#C2E4F6" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

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

  • Нет связанных вопросов^_^