我正在尝试扩展TextBox默认样式 https://msdn.microsoft.com/en-us/library/windows/apps/mt299154.aspx
我希望文字框的四角圆润。
<Border
x:Name="BackgroundElement"
Grid.Row="1"
Background="{TemplateBinding Background}"
Margin="{TemplateBinding BorderThickness}"
CornerRadius="{Binding Source={RelativeSource TemplatedParent}, Path=(icp:IcpExtend.CornerRadius)}"
Opacity="{ThemeResource TextControlBackgroundRestOpacity}"
Grid.ColumnSpan="2"
Grid.Column="0" />
<Border
x:Name="BorderElement"
Grid.Column="0"
Grid.Row="1"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{Binding Source={RelativeSource TemplatedParent}, Path=(icp:IcpExtend.CornerRadius)}"
Grid.ColumnSpan="2" />
这是附加属性类
[Bindable]
public class IcpExtend
{
public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.RegisterAttached(
"CornerRadius", typeof(CornerRadius), typeof(IcpExtend), new PropertyMetadata(default(CornerRadius)));
public static void SetCornerRadius(DependencyObject element, CornerRadius value)
{
element.SetValue(CornerRadiusProperty, value);
}
public static CornerRadius GetCornerRadius(DependencyObject element)
{
return (CornerRadius) element.GetValue(CornerRadiusProperty);
}
}
这是页面上的TextBox元素
<TextBox
icp:IcpExtend.CornerRadius="10"
Grid.Row="0"
Grid.Column="1"
PlaceholderText="Email"
InputScope="EmailSmtpAddress"
IsSpellCheckEnabled="False"
Text="{Binding Path=Email, Mode=TwoWay}" />
解决方案不起作用(角不圆)...如何绑定默认样式中的附加属性 - &gt; ControlTemplate?!
答案 0 :(得分:0)
那应该有用。如果您在模板中对CornerRadius进行硬编码,它是否有效?如果没有,那么你的风格就出现了问题。您应该将TextBox样式放入App.xaml资源中,样式应该只有TargetType="TextBox"
且没有密钥。
此外,您应该能够在模板中使用TemplateBinding而不是RelativeSource:
CornerRadius="{TemplateBinding icp:IcpExtend.CornerRadius}"
要记住的另一件事是这种风格适用于Windows SDK 10586(如该页面所述)。我使用的是SDK 14393,TextBox控件的默认样式与SDK 10586中的默认样式不同。请确保您使用的是正确的样式。您可以在C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.?????.0\Generic\generic.xaml
找到样式。