WPF - 当DateTemplate内的TextBox聚焦时,更改datatemplate子属性

时间:2017-01-28 07:10:20

标签: wpf listview triggers

我有一个listview,其中包含一个包装文本框的边框(以及示例代码中未显示的其他元素)。我希望当文本框被键盘聚焦以更改包装它的边框的属性时。

<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执行此操作。

1 个答案:

答案 0 :(得分:0)

当我尝试运行它时,我也得到错误&#34;无法在样式设置器上设置TargetName属性&#34;。这表示您无法在TextBox控件的样式设置器中设置Border控件的属性(这并不会让我感到惊讶。)

你可以做的是用边框控件本身的样式设置它,使用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>