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>