2

この XAML の一部を考えると

<DockPanel>
  <DockPanel.Resources>
    <Style TargetType="{x:Type GroupBox}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type GroupBox}">
            <DockPanel>
              <Border DockPanel.Dock="Top">
                <Border.Resources>
                  <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Foreground"
                        Value="Red" />
                  </Style>
                </Border.Resources>
                <ContentPresenter ContentSource="Header" />
              </Border>
              <ContentPresenter />
            </DockPanel>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </DockPanel.Resources>

  <GroupBox VerticalAlignment="Top"
      Header="GroupBox header"
      DockPanel.Dock="Top">

    ...
    ...

グループ ボックスのヘッダーが赤文字で表示されない理由を教えてください。

私はすでに Label タイプのスタイリングを試みましたが、どちらも成功しませんでした。

(非常に一般的な投稿タイトルで申し訳ありません...もっと意味のあるものを考えることができませんでした)

4

3 に答える 3

1

ヘッダーとして指定した文字列を表示するために TextBlock を使用してContentPresenterいないか、そのスタイルを明示的に設定していないようです。そのため、定義したスタイルを適用できません。

テキストのみをグループ ボックス ヘッダーとして使用することが確実な場合は、 を削除して独自にContentPresenter使用できTextBlockます。

  <DockPanel>
  <DockPanel.Resources>
    <Style TargetType="{x:Type GroupBox}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type GroupBox}">
            <DockPanel>
              <Border DockPanel.Dock="Top">
                <Border.Resources>
                  <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Foreground" Value="Red" />
                  </Style>
                </Border.Resources>
                <TextBlock Text="{TemplateBinding Header}"></TextBlock>
              </Border>
              <ContentPresenter />
            </DockPanel>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </DockPanel.Resources>

  <GroupBox VerticalAlignment="Top"
      Header="GroupBox header"
      DockPanel.Dock="Top"/>
  </DockPanel>
于 2009-11-24T17:23:50.723 に答える
1

このコードは問題を解決しました:

<DockPanel>
  <DockPanel.Resources>
    <Style TargetType="{x:Type GroupBox}">
      <Setter Property="HeaderTemplate">
        <Setter.Value>
          <DataTemplate>
            <DataTemplate.Resources>
              <Style TargetType="Label">
                <Style.Setters>
                  <Setter Property="Foreground" Value="Red" />
                </Style.Setters>
              </Style>
            </DataTemplate.Resources>
            <Label Content="{Binding}" />
          </DataTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </DockPanel.Resources>

  <GroupBox VerticalAlignment="Top" Header="GroupBox header" DockPanel.Dock="Top">
  ...
  ...

ただし、提案されたコードが機能しなかった理由はまだわかりません。

于 2009-11-24T17:24:02.953 に答える
1

これを試して:

<DockPanel.Resources>
    <Style TargetType="{x:Type GroupBox}" >
        <Setter Property="Foreground" Value="Red" />
    </Style>
</DockPanel.Resources>

これにはテンプレートは必要ありません。しかし、Templet を使用する必要がある場合は、おそらく GroupBox.Templet ではなく Groupbox.HeaderTemplet を設定する必要があります。

編集:

これは私がこれまでに得たものですが、 XamlPraseException.

<Style TargetType="{x:Type GroupBox}" >
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <ControlTemplate>
                <StackPanel>
                    <StackPanel.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Foreground" Value="Red"/>
                        </Style>
                    </StackPanel.Resources>
                    <TextBlock Text="{TemplateBinding GroupBox.Header}" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2009-11-24T16:59:36.280 に答える