Wpf 如何同步两个文本块';她有什么背景?
我想同步两个文本块的背景。例如,如果鼠标在任何一个文本块上,我想将两个文本块的背景色都更改为相同的颜色。我知道我可以使用此触发器更改一个背景:Wpf 如何同步两个文本块';她有什么背景?,wpf,background,triggers,sync,Wpf,Background,Triggers,Sync,我想同步两个文本块的背景。例如,如果鼠标在任何一个文本块上,我想将两个文本块的背景色都更改为相同的颜色。我知道我可以使用此触发器更改一个背景: <Style TargetType="{x:Type TextBlock}"> <Setter Property="Background" Value="LightGray"/> <Style.Triggers> <Trigger Property=
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="LightGray"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
但是如何同步它们呢
更新:这也不起作用:
<UserControl.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="LightGray"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Background="{Binding Path=Background, ElementName=tbHeader, Mode=TwoWay}" Text="A"/>
<TextBlock x:Name="tbHeader" Grid.Column="1" Text="B"/>
</Grid>
试试看
您可以将它们放在
ContentControl
中,然后像这样在ControlTemplate
上应用触发器来同步它-
<Grid>
<ContentControl>
<ContentControl.Template>
<ControlTemplate>
<StackPanel>
<TextBlock Text="Rohit" x:Name="txt1"/>
<TextBlock Text="Vats" x:Name="txt2"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="TextBlock.IsMouseOver" SourceName="txt1"
Value="True">
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt1"/>
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt2"/>
</Trigger>
<Trigger Property="TextBlock.IsMouseOver" SourceName="txt2"
Value="True">
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt1"/>
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt2"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
</Grid>
如果您正在寻找“正确”的MVVM方式,您应该将鼠标悬停在事件/属性上绑定到视图模型的同一属性,将背景再次绑定到同一属性,并使用转换器将其转换为适当的颜色(或带模板的样式)。好吧,这是我最初的想法,但它不起作用。只有当鼠标在textBlock1上时,它才起作用,但如果鼠标在textBlock2上,它就不起作用。将样式放在公共位置,或者放在TextBlock之外,Mode=TwoWay刚刚尝试过……将Mode=TwoWay添加到背景绑定也不起作用。请参阅上面我的更新中的完整代码。
<Grid>
<ContentControl>
<ContentControl.Template>
<ControlTemplate>
<StackPanel>
<TextBlock Text="Rohit" x:Name="txt1"/>
<TextBlock Text="Vats" x:Name="txt2"/>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="TextBlock.IsMouseOver" SourceName="txt1"
Value="True">
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt1"/>
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt2"/>
</Trigger>
<Trigger Property="TextBlock.IsMouseOver" SourceName="txt2"
Value="True">
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt1"/>
<Setter Property="TextBlock.Background" Value="Red"
TargetName="txt2"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
</Grid>