2017-04-04 65 views
1

我正在創建一個模仿AppBarButton(但具有自定義功能,因此我們不能從AppBarButton派生)的自定義控件。C#DependencyProperty - 使用複雜類型的默認屬性

我的問題是與 AppBarButton財產。該屬性本身需要IconElement,但如果您要創建AppBarButton並指定Icon內聯,它將默認爲Symbol枚舉併爲您創建SymbolIcon

我的問題是:我會如何複製這個?我似乎無法找到關於如何做到這一點的任何信息。

謝謝!

回答

4

IconElement是這些類的父類:

所以沒有指定一個SymbolIcon到問題的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" /> 
+0

這似乎工作,但我沒有得到任何Intellisense建議,因爲我使用'AppBarButton'時做的。對此有何建議? –

+0

@NolanBlew AFAIK,沒有這種自定義控件的支持。我們必須手動輸入。 –

2

你在找什麼是XAML型轉換器。它們允許您在屬性的內容可以使用簡寫符號時創建自定義解析方法。例如,當你輸入一個點值Point="10,25"時,有一個內置的解析器從你的字符串中提取x和y值。

您可以創建自己的。 Tim Heuer has an example here