首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF Style:如何在触发器中更改GradientStop颜色

WPF Style:如何在触发器中更改GradientStop颜色
EN

Stack Overflow用户
提问于 2010-03-22 00:38:33
回答 2查看 9.2K关注 0票数 7

我有一个Button风格:

代码语言:javascript
复制
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Grid>
          <Path x:Name="path1" ... Data="...some data...">
            <Path.Fill>
              <LinearGradientBrush EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
                <GradientStop x:Name="gs1" Color="Green" Offset="0.44"/>
                <GradientStop Color="Black" Offset="0.727"/>
              </LinearGradientBrush>
            </Path.Fill>
          </Path>                            
        <ContentPresenter ...properties...   />
      </Grid>

     <ControlTemplate.Triggers>
       <Trigger Property="IsMouseOver" Value="True">
         <Setter TargetName="???" Property="Color" Value="Green"></Setter>
       </Trigger>
     </ControlTemplate.Triggers>
   </ControlTemplate>
 </Setter.Value>

当鼠标悬停在按钮上时,我想用x:Name="gs1“更改触发器的颜色,所以我使用触发器IsMouseOver。如何访问触发器中的颜色属性?我尝试了TargetName="gs1“和TargetName="path1.gs1”,但不起作用。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-22 01:07:17

试试这个:

代码语言:javascript
复制
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
        <Style.Resources>
            <LinearGradientBrush x:Key="gs1" EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
                <GradientStop Color="Green" Offset="0.44"/>
                <GradientStop Color="Black" Offset="0.727"/>
            </LinearGradientBrush>
            <LinearGradientBrush x:Key="gs2" EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
                <GradientStop Color="White" Offset="0.44"/>
                <GradientStop Color="Black" Offset="0.727"/>
            </LinearGradientBrush>
        </Style.Resources>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Path x:Name="path1" ........... Fill="{StaticResource gs1}">
                        </Path>
                        <ContentPresenter  .........../>
                    </Grid>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="path1" Property="Fill" Value="{StaticResource gs2}"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>

        </Setter>
    </Style>

它将为您工作。您还可以使用DataBinding,在代码中声明一个颜色颜色,将其与GradientStop的DependencyProperty属性绑定,并随时更新它。

票数 8
EN

Stack Overflow用户

发布于 2010-03-22 01:03:04

我想你得换掉整个刷子了。设置按钮样式的Here is a good example

代码语言:javascript
复制
<ControlTemplate.Triggers>
   <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="Fill" TargetName="path1">
         <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
               <GradientStop Color="Black" Offset="0.44"/>
               <GradientStop Color="Green" Offset="0.727"/>
            </LinearGradientBrush>
         </Setter.Value>
       </Setter>
    </Trigger>
</ControlTemplate.Triggers>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2487814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档