【问题标题】:Styling Inner Elements in XAML Style以 XAML 样式设置内部元素的样式
【发布时间】:2013-05-22 03:37:19
【问题描述】:

我有这个代码

<HyperlinkButton Style="{StaticResource HyperLink-Navi-Container}">
      <HyperlinkButton.Content>
             <TextBlock Text="Sample Text"></TextBlock>
      </HyperlinkButton.Content>
</HyperlinkButton>

还有这种风格

<Style x:Key="HyperLink-Navi-Container" TargetType="HyperlinkButton">
    <Setter Property="Height" Value="50"></Setter>
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="1, 0.5" EndPoint="1, 2">
                <GradientStop Color="White" Offset="0.75"></GradientStop>
                <GradientStop Color="Gray"></GradientStop>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="Margin" Value="2,2,2,0"></Setter>
    <Setter Property="Foreground" Value="Orange"></Setter>

</Style>

现在我的问题是如何为 TextBlockHyperlinkBut​​ton 中的任何其他元素的属性设置样式,就像在 CSS 中一样

HyperlinkButton.*
{
  Background : red;
}

TIA

【问题讨论】:

    标签: wpf silverlight xaml windows-store-apps


    【解决方案1】:

    您需要使用绑定解析背景属性

    将此添加到 TextBlock:

    {Binding Path=Background, RelativeSource={RelativeSource AncestorType={x:Type HyperlinkButton}}}
    

    【讨论】:

      【解决方案2】:

      TextBlock 没有要设置的 Background 属性。您需要将其包装在另一个控件中,例如 Border

      <HyperlinkButton.Content>
          <Border Background="Red">
              <TextBlock Text="Sample Text"></TextBlock>
          </Border>
      </HyperlinkButton.Content>
      

      当然你也可以使用样式来设置边框背景:

      <Style x:Key="HyperlinkBorder" TargetType="Border">
          <Setter Property="Background" Value="Red" />
      </Style>
      
      <HyperlinkButton.Content>
          <Border Style="{StaticResource HyperlinkBorder}">
              <TextBlock Text="Sample Text"></TextBlock>
          </Border>
      </HyperlinkButton.Content>
      

      编辑:

      您不能从 XAML 中的样式或外部元素影响嵌套元素。不过,您可以在样式中设置ContentTemplate

      <DataTemplate x:Key="HyperlinkTemplate">
          <Border Background="Red">
              <TextBlock Text="Sample Text"></TextBlock>
          </Border>
      </DataTemplate>
      
      <Style x:Key="HyperLink-Navi-Container" TargetType="HyperlinkButton">
          <Setter Property="Height" Value="50"></Setter>
          <Setter Property="Background">
              <Setter.Value>
                  <LinearGradientBrush StartPoint="1, 0.5" EndPoint="1, 2">
                      <GradientStop Color="White" Offset="0.75"></GradientStop>
                      <GradientStop Color="Gray"></GradientStop>
                  </LinearGradientBrush>
              </Setter.Value>
          </Setter>
          <Setter Property="Margin" Value="2,2,2,0"></Setter>
          <Setter Property="Foreground" Value="Orange"></Setter>
          <Setter Property="ContentTemplate" Value="{StaticResource HyperlinkTemplate}" />
      </Style>
      

      【讨论】:

      • 嗨,我只使用背景作为示例。我的意思是如何在样式中访问元素内的元素
      • @VincentDagpin 我对 CSS 了解不多,所以我猜测您想要实现的目标。也许在样式中设置ContentTemplate 是您正在寻找的。请参阅我编辑的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 2013-12-11
      • 2015-01-31
      • 1970-01-01
      相关资源
      最近更新 更多