我正在寻找一个自定义WPF按钮的示例。理想情况下是在喜欢的Blend/VS2013配置中,即VS2013测试解决方案,该解决方案包括一个按钮项目,可以在Blend for VS2013中编辑。按钮应具有视觉外观,以清楚地表明其处于什么状态,即
- 正常=默认
- MouseOver=内部发光
- Pressed=较小的尺寸/较小的阴影
- ToggedOn=外部辉光
- 禁用=灰显
给定这样一个例子,我可以使用Blend调整状态的视觉外观。
在应用程序方面,我只想实例化按钮,关联样式,并设置BackgroundColor、图像/图标、文本标签、宽度和高度的属性。
我似乎建议使用ControlTemplate样式,而不是子类,请参阅MSDN。
三个关键问题似乎是:
- 如何设置VS2013/混合项目结构,以便在一组源文件上互换使用
- 如何计算ControlTemplate中的相对大小,即语法是什么Width=Button。Width x 1.1设置相对于实际按钮大小的辉光扩展,该按钮大小不在模板中,但将在客户端应用程序UI设计中定义
- 如何根据按钮的基本颜色计算相对颜色,即GradientStop color=button.BackgroundColor x 80%+White x 20%的WPF XAML语法是什么
这应该是一个非常常见的需求,但谷歌在找到类似上面的东西方面没有帮助。
如能在这三个关键问题中的任何一个问题上提供帮助,我们将不胜感激。
您的需求不需要定义新的ControlTemplate
,可以通过Style
和Triggers
来实现,例如:
<Grid>
<Grid.Resources>
<Style TargetType="Button">
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="0.75" ScaleY="0.75"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Button Content="Click Me!" />
</Grid>
- 如果在App.xaml资源中定义并给定x:Key,则可以在应用程序中的任何位置访问
Style
- 使用
ScaleTransform
的ScaleX和ScaleY是相对值 - 您将需要自己的
IValueConverter
,然后使用转换器将目标颜色绑定到源颜色