2

2つのTextBlockの背景を同期させたい。たとえば、マウスがいずれかのテキストブロックの上にある場合、両方のテキストブロックの背景色を同じに変更したいと思います。このトリガーを使用して、1つの背景を変更できることはわかっています。

    <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>
4

3 に答える 3

0

「正しい」MVVMの方法を探している場合は、マウスオーバーイベント/プロパティをビューモデルの同じプロパティにバインドし、背景を同じプロパティに再度バインドする必要があります。コンバーターを使用して、適切な色に変換します。 (またはテンプレートを使用したスタイル)。

于 2012-11-26T19:47:25.257 に答える
0

要素間のバインディングを試してください

<TextBlock x:Name=textBlock1>
<TextBlock.Style>
<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>
</TextBlock.Style>
</TextBlock>

<TextBlock Background={Binding Path=Background ElementName=textBlock1/><!--Background gets set from textBlock1-->
于 2012-11-26T16:28:42.490 に答える
0

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>
于 2012-11-26T19:44:44.220 に答える