4

コントロール テンプレートを使用して、表示状態 (マウスオーバー、無効など) に応じて背景色を設定するスタイル付きテキスト ボックスがあります。コードは、MS のTextBox テンプレートページから取得されました。

私がやりたいことは、視覚的な状態に応じてフォアグラウンド (フォント) の色も変更することです。例えばMouseoverでは文字色を目立たせたい、Disabledではグレーアウトしたい

私の xaml ('Normal' と 'Disabled' の VisualState タグと、Border のいくつかの <Border.Blah> の子を削除しました):

<Color x:Key="EditableControlHiLightColor">Ivory</Color>
<Color x:Key="EditableControlHiLightTextColor">Pink</Color>


<Style TargetType="{x:Type TextBox}">
  <Setter Property="MinWidth" Value="100" />
  <Setter Property="MinHeight" Value="20" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type TextBoxBase}">
        <Border Name="Border"
            CornerRadius="4"
            Padding="2"
            BorderThickness="1">
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualState x:Name="MouseOver" >
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(TextBox.Background).Color">
                    <EasingColorKeyFrame KeyTime="0" Value="{StaticResource EditableControlHiLightColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ScrollViewer Margin="0" x:Name="PART_ContentHost" />
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

最初に、Storyboard タグ内に新しい <ColorAnimationUsingKeyFrames> を追加して、前景を次のように変更しようとしました。

<Storyboard>
  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(TextBox.Background).Color">
    <EasingColorKeyFrame KeyTime="0" Value="{StaticResource EditableControlHiLightColor}" />
  </ColorAnimationUsingKeyFrames>
  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(TextBox.Foreground).Color">
    <EasingColorKeyFrame KeyTime="0" Value="{StaticResource EditableControlHiLightTextColor}" />
  </ColorAnimationUsingKeyFrames>
</Storyboard>

しかし、それは何の効果もありませんでした - テキストの色は同じままです。

これは <ControlTemplate> の上部にある <Border> が原因であると考えたので、<Foreground ... > タグを ControlTemplate の子として設定しようとしました。Visual Studio にはそれがありませんでした。(タイプ Foreground が見つかりませんでした。アセンブリ参照が欠落していないこと、および参照されているすべてのアセンブリがビルドされていることを確認してください。 )

SO を調べたところ、変更できないテンプレート バインディングによって設定されたプロパティに関係があるようですが、私の場合、変更しようとしているのはテンプレート内です。

では、視覚状態を使用してコントロール テンプレートのテキスト ボックスの前景色 (フォント) の色を変更するにはどうすればよいでしょうか。

4

1 に答える 1