2016-01-22 84 views
1

元素我有一個ControlTemplate這樣的:二傳手的內部ContentPresenter

<ControlTemplate TargetType="Button"> 
    <Grid Background="Transparent"> 
     <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" 
          VerticalAlignment="Center" /> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect BlurRadius="20" Color="Black" ShadowDepth="0" 
             Opacity="0.5" /> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="FontWeight" Value="SemiBold"/> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect BlurRadius="20" Color="Black" ShadowDepth="0" Opacity="1" /> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="Gray" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

當IsMouseOver屬性更改爲True,我要contentPresenter中的所有圖像有DropShadowEffect,而不是按鈕本身。
我嘗試將setter屬性更改爲Image.Effect,但它不起作用。
我該怎麼做?

這是我的按鈕看起來像當鼠標懸停:enter image description here
,這是它的外觀時,它不是:enter image description here
正如你可以看到,無論是圖像和TextBlock的越來越陰影效果的影響。但我只想要圖像來獲取它。

+0

我誤解了您的問題,忽略了我以前的評論。什麼不行?你可以附上截圖來展示問題嗎? – Sinatr

+0

@Sinatr我編輯了這個問題並添加了一些截圖。 –

回答

1

你可以採用Sinatr推薦的樣式並將其放入按鈕控制模板的ControlTemplate.Resources部分。這是一個適合我的例子。它也處理IsPressed事件,在此期間我假設您要調整圖像的陰影效果:

<ControlTemplate x:Key="BtnTemplate" TargetType="{x:Type Button}"> 
    <Grid Background="Transparent"> 
     <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
    </Grid> 

    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="FontWeight" Value="SemiBold"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="Gray" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 

    <ControlTemplate.Resources> 
     <Style TargetType="{x:Type Image}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=Button}}" Value="True"> 
        <DataTrigger.Setters> 
         <Setter Property="Effect"> 
          <Setter.Value> 
           <DropShadowEffect BlurRadius="20" Color="Black" ShadowDepth="0" Opacity="0.5"/> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger.Setters> 
       </DataTrigger> 

       <DataTrigger Binding="{Binding IsPressed, RelativeSource={RelativeSource AncestorType=Button}}" Value="True"> 
        <DataTrigger.Setters> 
         <Setter Property="Effect"> 
          <Setter.Value> 
           <DropShadowEffect BlurRadius="20" Color="Black" ShadowDepth="0" Opacity="1" /> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger.Setters> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ControlTemplate.Resources> 
</ControlTemplate> 
+0

謝謝。這實際上工作:) –

0

你並不真的需要定義Button模板,而創建一個Image風格

<Style x:Key="style" 
     TargetType="Image"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=Button}}" 
        Value="True"> 
      <DataTrigger.Setters> 
       <Setter Property="Effect"> 
        <Setter.Value> 
         <DropShadowEffect BlurRadius="20" 
              Color="Black" 
              ShadowDepth="0" 
              Opacity="0.5" /> 
        </Setter.Value> 
       </Setter> 
      </DataTrigger.Setters> 
     </DataTrigger> 
    </Style.Triggers> 

並將其應用到你每一個裏面顯示的按鈕圖像

<Button> 
... 
    <Image Style="{StaticResource style}" ... /> 
... 
</Button> 
+0

你確定沒有辦法使用ControlTemplate來做它嗎? (順便說一下,控制模板是需要的,因爲我想覆蓋按鈕的模板並提供我自己的模板。) –

+0

我爲您提供了一個解決方案。也許還有其他的可能性,但這是我會做的。如果會顯示許多按鈕,那麼我最終可能會自定義控件(至少可以將不同的圖像分配給按鈕的圖像)。 – Sinatr