2017-06-18 57 views
0

我制作了一个从类Thumb继承的定制拇指。缩放Mouse-hover上的自定义UserControl

public class MyThumb : Thumb 
{ 
    //Properties 
    //Constructors 
    ... 
    ... 
} 

我想让它在用户的鼠标悬停时放大,然后在悬停被移除时返回到其正常状态。我已经在App.xaml中编写了它,以便它可以应用在Canvas区域中的任何拇指上。

<Style x:Key="MyThumb" TargetType="Thumb"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Grid.ZIndex" Value="1"/> 
        <Setter Property="RenderTransform"> 
         <Setter.Value> 
          <ScaleTransform ScaleX="1.1" ScaleY="1.1"/> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

但这不起作用。拇指不缩放。我究竟做错了什么?

回答

1

目前拇指的风格将只适用于具有Style属性设置这样的对象:

<Thumb Style="{StaticResource MyThumb}" /> 

<local:MyThumb Style="{StaticResource MyThumb}" /> 

能够使用自定义的拇指控制,你必须添加(通常是文档的根元素,但也可以是其他任何),如下所示:

<Window ... 
     xmlns:local="clr-namespace:WpfApp1" /> 

“WpfApp1”必须由您的名称空间进行重新分配。这里的控件位于应用程序的主要命名空间中。如果控件位于子名称空间“WpfApp1.Controls”中,则必须编写xmlns:local="clr-namespace:WpfApp1.Controls"local可以用你喜欢的任何名称(在新创建的页面中,用户控件......)进行本地referes到创建的元素所在的名称空间,因此您可能需要将另一个名称空间声明添加到上述文件das。另外,上述内容也适用于App.xaml,您可以在其中添加样式(或者您希望在xaml中使用该控件的任何其他文件)。

x:Key属性只确定资源字典中包含该样式的样式的键。

如果你想要的样式应用到这两种类型在默认情况下,您可以创建Thumb对象的风格并为基于前者MyThumb对象样式(如果你只是想要的样式应用到所有MyThumb对象,你可以省略前,卸下后风格BasedOn属性):

<Style TargetType="Thumb"> 
    <!-- Your setters and other stuff --> 
    ... 
</Style> 

<Style TargetType="local:MyThumb" BasedOn="{StaticResource {x:Type Thumb}}"> 
    <!-- Additional setters and other stuff --> 
    ... 
</Style> 

注:在样式这种情况下,没有一个是关键。

+0

当我使用您提供的代码片段时,它提供了一个错误“Windows Presentation Foundation(WPF)项目中不支持MyThumb”。我应该做些额外的事情来解决这个问题。我应该在哪里设置样式属性。我是新来的WPF,请帮助 –

+0

@RahulKurup我已经更新了我的答案来解决您的问题。风格必须像任何其他属性一样设置(例如元素上的“宽度”或“高度”)。 – Streamline