我正在创建一个模仿AppBarButton
的自定义控件(但具有使我们无法从AppBarButton
派生的自定义功能)。
我的问题在于Icon
的{{1}}属性。该属性本身需要AppBarButton
,但如果您要创建IconElement
并指定AppBarButton
内联,则默认为Icon
枚举并创建Symbol
对你而言。
我的问题是:我将如何复制这个?我似乎无法找到有关如何执行此操作的任何信息。
谢谢!
答案 0 :(得分:4)
IconElement是这些类的父类:
将SymbolIcon
分配给AppBarButton
Icon
属性是没有问题的。在UWP XAML系统中,有SymbolIcon
的内置类型转换器支持。对于复制,您应该能够定义DependencyProperty哪个类型为IconElement
,然后将其用作AppBarButton
。
举一个简单的例子,我创建了一个名为" CustomAppBarButton"的模板控件。使用名为" Icon"。
的依赖项属性CustomAppBarButton.cs :
public sealed class CustomAppBarButton : Control
{
public CustomAppBarButton()
{
this.DefaultStyleKey = typeof(CustomAppBarButton);
}
public IconElement Icon
{
get { return (IconElement)GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
// Using a DependencyProperty as the backing store for Icon. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IconProperty =
DependencyProperty.Register("Icon", typeof(IconElement), typeof(CustomAppBarButton), new PropertyMetadata(null));
}
Generic.xaml:
<Style TargetType="local:CustomAppBarButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:CustomAppBarButton">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter x:Name="Content"
HorizontalAlignment="Stretch"
Content="{TemplateBinding Icon}"
Foreground="{TemplateBinding Foreground}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后你可以像下面一样使用它。
<local:CustomAppBarButton Icon="Like" Foreground="Red" />
答案 1 :(得分:2)
您正在寻找的是XAML型转换器。当属性的内容可以使用简写表示法时,它们允许您创建自定义解析方法。例如,当您键入点值Point="10,25"
时,会有一个内置解析器从字符串中提取x和y值。
您可以创建自己的。 Tim Heuer has an example here