ControlTemplate中的UWP附属物

时间:2016-10-27 06:23:08

标签: c# uwp uwp-xaml

我正在尝试扩展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?!

1 个答案:

答案 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找到样式。