2012-11-29 83 views
4

我這個回答這個問題,有關鏈接按鈕的工作:我如何正確地應用樣式到內容呈現

https://stackoverflow.com/a/3564706/945

的問題是,TextDecoration下劃線樣式只被應用到自動生成的TextBlocks。

<Button Style="{StaticResource LinkButton}">Text</Button> 

'文本' 強調

<Button Style="{StaticResource LinkButton}"><TextBlock Text='Text' /></Button> 

'文本' 是不是下劃線

爲什麼不申請內容中的任何TextBlock的?

這是風格的相關部分:

<Style x:Key="LinkButton" 
     TargetType="Button" 
     BasedOn="{StaticResource ResourceKey={x:Type Button}}" 
     > 

    <Setter Property="Width" Value="Auto"/> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <ContentPresenter Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}" 
            VerticalAlignment="Center" 
            > 
        <ContentPresenter.Resources> 
         <Style TargetType="{x:Type TextBlock}"> 
          <Setter Property="TextDecorations" Value="Underline" /> 
         </Style> 
        </ContentPresenter.Resources> 
       </ContentPresenter> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

爲什麼要在Button中放置TextBlock? Button類擁有自己的內置「Content」字段,可以很好地進行格式和縮放 - 您還可以在Blend中輕​​鬆編輯它的操作方式。 '

回答

2

我相信,當你把一個框架元素的ContentControl中內,不應用模板。如果您還將TextBlock樣式聲明爲Button的資源,則兩種情況都適用。

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:local="clr-namespace:WpfApplication1" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    Title="MainWindow" 
    Width="525" 
    Height="350" 
    mc:Ignorable="d"> 
<Window.Resources> 
    <Style x:Key="LinkButton" 
      BasedOn="{StaticResource ResourceKey={x:Type Button}}" 
      TargetType="Button"> 

     <Setter Property="Width" Value="Auto" /> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <ContentPresenter VerticalAlignment="Center" 
             Content="{TemplateBinding Content}" 
             ContentTemplate="{TemplateBinding ContentTemplate}" > 
         <ContentPresenter.Resources> 
          <Style TargetType="{x:Type TextBlock}"> 
           <Setter Property="TextDecorations" Value="Underline" /> 
          </Style> 
         </ContentPresenter.Resources> 
        </ContentPresenter> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Window.DataContext> 
    <local:ViewModel /> 
</Window.DataContext> 
<Grid x:Name="LayoutRoot"> 
    <StackPanel> 
     <Button Style="{StaticResource LinkButton}">Text</Button> 
     <Button Style="{StaticResource LinkButton}"> 
      <Button.Resources> 
       <Style TargetType="{x:Type TextBlock}"> 
        <Setter Property="TextDecorations" Value="Underline" /> 
       </Style> 
      </Button.Resources> 
      <TextBlock Text="Text" /> 
     </Button> 
    </StackPanel> 
</Grid> 
</Window> 
+3

但是,重點是定義一個「LinkBut​​ton」風格一次。不將自定義樣式應用於應用程序中的每個鏈接按鈕 – Clyde

+0

您可以在控件資源中定義完整樣式(或選擇Button資源中的樣式作爲主體),並根據以下內容將ContententPresenter中的樣式定義爲佔位符:主要。 –

1

昨天我遇到了類似的麻煩。您可以將樣式設置器移動到Template節點外,以便在更改控件內容後不會擦除樣式。

0

問題是你設置了x:Key="LinkButton"。如果設置密鑰,隱式樣式將不起作用。刪除鍵,它將應用於所有按鈕

相關問題