需要在 C# Winform 自动创建一个 wpf 按钮,是通过 XamlReader Style 的,但网上的例子大多数都是 X:clsss 型,我调试了一个,支持用 XamlReader,button 是三角型的,按下变色,松开复原:
using System.Windows.Markup;
在 Winform 中拉入一个 ElementHost,命名为:elementHost1,在它上面创建一个三角形 Button。
static string Sstyle=
@"<Style TargetType='Button' xmlns = 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
<Setter Property='Width' Value='100'/>
<Setter Property='Height' Value='100'/>
<Setter Property='Foreground' Value='White'/>
<Setter Property='Template'>
<Setter.Value>
<ControlTemplate TargetType='Button'>
<Grid>
<Polygon Name='GelBackground' Fill='LightSeaGreen'
Points='0,0 2,0 1,2' Stroke='Black' StrokeThickness='2'
SnapsToDevicePixels='True' Stretch='Uniform'/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property='IsMouseOver' Value='True'>
<Setter Property='Polygon.Fill' TargetName='GelBackground'>
<Setter.Value>
<RadialGradientBrush>
<GradientStop Offset='0' Color='Lime'></GradientStop>
<GradientStop Offset='1' Color='DarkGreen'></GradientStop>
</RadialGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property='IsPressed' Value='True'>
<Setter Property='Polygon.Fill' TargetName='GelBackground'>
<Setter.Value>
<RadialGradientBrush>
<GradientStop Offset='0' Color='#ffcc34'></GradientStop>
<GradientStop Offset='1' Color='#cc9900'></GradientStop>
</RadialGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>"
private System.Windows.Controls.Button CreateWPFButton(ElementHost elementHost, string sStyle, string sName, string sContent)
{
var CreateButton = new System.Windows.Controls.Button();
CreateButton.Style = GetStyle(sStyle);
CreateButton.Content = sContent;
CreateButton.Name = sName;
elementHost.Child = CreateButton;
CreateButton.TouchDown += CreateButton_TouchDown;
CreateButton.PreviewMouseDown += CreateButton_PreviewMouseDown;
CreateButton.TouchUp += CreateButton_TouchUp;
CreateButton.TouchLeave += CreateButton_TouchLeave;
CreateButton.PreviewMouseUp += CreateButton_PreviewMouseUp;
return CreateButton;
}
private Style GetStyle(string sStyle)
{
return XamlReader.Parse(sStyle) as Style;
}
System.Windows.Controls.Button btn = CreateWPFButton(elementHost1,Sstyle, "sName","sContent");