但是在我繼續之前,有沒有辦法在XAML中實現它?
是的,我認爲這是可能的。但轉換器需要
我知道有沒有辦法,我可以做在XAML的計算,也許除了一個轉換器
是的,我們需要轉換器來計算和CornerRadius是CornerRadius
型,我們不能直接綁定雙重類型的Height/2
。這裏我用Button
的高度來計算半徑。
我的想法是將邊框的CornerRadius綁定到按鈕高度的一半。
我覺得沒有必要使用Border
爲Button
,Grid
和ContentPresenter
的ControlTemplate
也有CornerRadius
財產。
例如這裏:
<ControlTemplate TargetType="Button">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}"
CornerRadius="{Binding Height, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource cvt}}">
<ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTransitions="{TemplateBinding ContentTransitions}"
Content="{TemplateBinding Content}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Padding="{TemplateBinding Padding}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
CornerRadius="{Binding Height, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource cvt}}" />
</Grid>
</ControlTemplate>
<local:HeightToCornerRadiusConverter x:Key="cvt" />
我HeightToCornerRadiusConverter
是這樣的:
public class HeightToCornerRadiusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var height = (double)value;
CornerRadius radius = new CornerRadius(height/2);
return radius;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
這裏有一個問題,因爲你可以看到CornerRadius
綁定到Button
的Height
,所以當我們使用這種風格時,我們需要將高度設置爲Button
非常重要。
你的意思是說,邊是半圓形的「藥丸」式效應?或者每個角落都是半圓形的? –
你想要這個[style](http://i.stack.imgur.com/pC9wp.png)還是這個[one](http://i.stack.imgur.com/mMHba.png)?我個人認爲第二個可能會有點難看。 –
@ChrisW。這就是這個詞。丸式效果 – afaolek