2012-08-10 71 views
1

我正在嘗試製作一個模板,該模板將更改Button的背景以及其顏色爲TextBlock。我在我的模板中嘗試了以下XAML,但它只是使鼠標懸停上的按鈕消失。有沒有辦法改變觸發器上的按鈕內容的屬性?在觸發器中更改XAML中的按鈕內容

   <ControlTemplate TargetType="{x:Type Button}"> 
       <Border 
         x:Name="Border" 
         CornerRadius="0" 
         BorderThickness="0" 
         Background="{x:Null}" 
         BorderBrush="#FF404040" /> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="White" /> 
          <Setter Property="ContentTemplate"> 
           <Setter.Value> 
            <DataTemplate DataType="TextBlock"> 
             <TextBlock Foreground="Blue" /> 
            </DataTemplate> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

回答

2

風格:

<Style TargetType="{x:Type Button}" x:Key="MyButton"> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border x:Name="Border" 
         CornerRadius="0" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}" 
         TextBlock.Foreground="{TemplateBinding Foreground}" 
         BorderBrush="#FF404040"> 
        <ContentPresenter Margin="2" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
             RecognizesAccessKey="True" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="White" /> 
         <Setter TargetName="Border" Property="TextBlock.Foreground" Value="Blue" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

用法:

<Button Width="100" Height="50" Content="Lalala" Style="{StaticResource MyButton}" Background="Brown" Foreground="Green" BorderThickness="2"></Button> 
  1. 你錯過了ContentPresenter,負責可視化的的Content財產Button
  2. 要設置前景,您可以使用TextBlock.Foreground附加屬性。
  3. Control Styles and Templates一直非常有用的給我:)
+0

謝謝!正確地我需要=) – Parker 2012-08-13 17:53:36

+0

旁邊的問題,如果我的Button的內容是一個StackPanel內部有一個TextBlock,我會用StackPanel.TextBlock.Foreground而不是TextBlock.Foreground嗎? – Parker 2012-08-13 17:56:34

+1

不幸的是'TextBlock.Foreground'不能用於更復雜的場景(只是默認的)。 'StackPanel.TextBlock.Foreground'也不起作用。當你有更復雜的內容時,我認爲樣式應該在上下文本身而不是模板上完成。 – ShadeOfGrey 2012-08-14 06:04:03