Binding WPF:当目标文本框具有焦点时,如何设置标签样式?
当关联的文本框有焦点时,我想突出显示一个标签。这项工作:Binding WPF:当目标文本框具有焦点时,如何设置标签样式?,binding,Binding,当关联的文本框有焦点时,我想突出显示一个标签。这项工作: <Label Grid.Row="1" Grid.Column="0" Target="{Binding ElementName=CountryCode}"> <Label.Style> <Style TargetType="{x:Type Label}"> <Style.Triggers> <DataTrigger Binding="{B
<Label Grid.Row="1" Grid.Column="0" Target="{Binding ElementName=CountryCode}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=CountryCode, Path=(IsFocused)}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
<AccessText Text="{Binding Path=CountryCodeLabel}" />
</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="CountryCode" Text="{Binding Path=CountryCode}" />
<Style x:Key="HighlightOnFocus" TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=CountryCode, Path=(IsFocused)}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
...
<Label Grid.Row="1" Grid.Column="0" Style="{StaticResource HighlightOnFocus}">
<AccessText Text="{Binding Path=CountryCodeLabel}" />
</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="CountryCode" Text="{Binding Path=CountryCode}" />
但是我有一大堆这样的文本框,所以我更喜欢模板样式。这项工作:
<Label Grid.Row="1" Grid.Column="0" Target="{Binding ElementName=CountryCode}">
<Label.Style>
<Style TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=CountryCode, Path=(IsFocused)}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
<AccessText Text="{Binding Path=CountryCodeLabel}" />
</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="CountryCode" Text="{Binding Path=CountryCode}" />
<Style x:Key="HighlightOnFocus" TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=CountryCode, Path=(IsFocused)}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
...
<Label Grid.Row="1" Grid.Column="0" Style="{StaticResource HighlightOnFocus}">
<AccessText Text="{Binding Path=CountryCodeLabel}" />
</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="CountryCode" Text="{Binding Path=CountryCode}" />
...
但是我当然不能在那里硬编码元素名。所以我试了一下:
<Style x:Key="HighlightOnFocus" TargetType="{x:Type Label}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=(IsFocused)}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
...
<Label Grid.Row="1" Grid.Column="0" Style="{StaticResource HighlightOnFocus}" DataContext="{Binding ElementName=CountryCode}">
<AccessText Text="{Binding Path=CountryCodeLabel}" />
</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="CountryCode" Text="{Binding Path=CountryCode}" />
...
但是在标签中设置DataContext会弄乱我的AccessText元素中的绑定。所以问题是-除了设置datacontext之外,是否有其他方法指定样式datatrigger的元素名称?有没有更好的方法来完成我想做的事情?这里有一个很好的解决方案: 一般来说,这相当容易。创建自定义附着属性,如下所示: 然后为高亮显示添加样式:
然后简单地像这样使用它:
这里有一个很好的解决方案: 一般来说,这相当容易。创建自定义附着属性,如下所示: 然后为高亮显示添加样式:
然后简单地像这样使用它:
即使我手动添加了标记,我也不知道为什么语法突出显示不起作用。无论如何,这个解决方案是有效的:)我不知道为什么语法高亮显示不起作用,即使我手动添加了标记。解决方案仍然有效:)
<Label Content="Label" Style="{StaticResource HighlightOnFocus}"
local:CustomAttached.IsTargetFocused="{Binding IsFocused, ElementName=textBox}">
</Label>
<TextBox x:Name="textBox" Text="TextBox" />