2017-01-28 7 views
0

У меня есть listview с Border wrapping текстовое поле (и другие элементы, которые не показаны в примере кода). Я хочу, чтобы текстовое поле сфокусировалось на клавиатуре, чтобы изменить свойство границы, которая его обертывает.WPF - Когда TextBox внутри DateTemplate сфокусирован, измените свойство дочернего элемента datatemplate

<ListView ItemsSource="{Binding activeLists}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Border x:Name="border"> 
        <TextBox Text="something"> 
         <TextBox.Style> 
          <Style> 
           <Style.Triggers> 
            <Trigger Property="TextBox.IsFocused" Value="True"> 
             <Setter TargetName="border" Property="TextBox.Background" Value="Red"></Setter> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </TextBox.Style> 
        </TextBox> 
       </Border> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

При использовании внутри триггера TargetName = "border" элемент не найден. Если это возможно только от XAML.

ответ

0

Когда я попытался запустить это, у меня также появилась ошибка: «Свойство TargetName не может быть установлено в Style Setter». Это указывает на то, что вы не можете установить свойство пограничного контроля внутри установщика стиля для элемента управления TextBox (что меня не удивляет.)

Вместо этого вы можете установить его в стиле рамки сам контроль, используя DataTrigger для привязки к свойству IsFocused текстового поля:

<Border> 
    <Border.Style> 
     <Style TargetType="Border"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=IsFocused, ElementName=textBox}" Value="true"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
    <TextBox Name="textBox" Text="something"/> 
</Border> 

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

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