之前的工作中遇到需要設(shè)置圓角button的問(wèn)題,雖然可以在xaml中設(shè)置cornerRadius
<ControlTemplate x:Key="radiusBtnTemplate" TargetType="{x:Type ButtonBase}">
<Border CornerRadius="5" Background="#FF19ADF0" Margin="20 10" TextBlock.Foreground="White" BorderBrush="#FF1F6BC2">
<Viewbox>
<TextBlock Margin="10">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}"/>
</TextBlock>
</Viewbox>
</Border>
</ControlTemplate>
但是,隨著屏幕的縮放,固定大小的CornerRadius在控件大小自適應(yīng)屏幕的時(shí)候,就不能保持相同的弧度了。此時(shí)需要?jiǎng)討B(tài)的創(chuàng)建ControlTemplate方法
public ControlTemplate GetControlTemplate(double cornerRadius,string colorStr, Thickness? margin = null)
{
FrameworkElementFactory border = new FrameworkElementFactory(typeof(Border));
border.SetValue(Border.BackgroundProperty, new SolidColorBrush((Color)ColorConverter.ConvertFromString(colorStr)));
border.SetValue(Border.CornerRadiusProperty, new CornerRadius(cornerRadius));
if (null != margin)
{
border.SetValue(Border.MarginProperty, margin);
}
FrameworkElementFactory vb = new FrameworkElementFactory(typeof(Viewbox));
border.AppendChild(vb);
FrameworkElementFactory tb = new FrameworkElementFactory(typeof(TextBlock));
tb.SetValue(TextBlock.MarginProperty, new Thickness(10));
vb.AppendChild(tb);
FrameworkElementFactory cp = new FrameworkElementFactory(typeof(ContentPresenter));
cp.SetValue(ContentPresenter.ContentProperty, new TemplateBindingExtension(ContentControl.ContentProperty));
tb.AppendChild(cp);
ControlTemplate ct = new ControlTemplate();
ct.VisualTree = border;
return ct;
}