2009-12-05 78 views
1

後自動出現了C#代碼文件 - MyCustomControl.cs:在WPF中應該將XAML用於自定義控件的佈局?創建自定義的控制有

public class MyCustomControl : ContentControl { 
    static MyCustomControl() { 
     ... 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), 
     new FrameworkPropertyMetadata(typeof(MyCustomControl))); 
     } 
     ... 
} 

和文件默認梃 - 主題\ Generic.xaml:

<!-- themes/generic.xaml --> 
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:CustomControlLib"> 
    <Style TargetType="{x:Type local:MyCustomControl}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type local:MyCustomControl}"> 
     <Border Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}"> 
     <ContentPresenter /> 
     </Border> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
    </Style> 
</ResourceDictionary> 

但是,在如何應我正確地放置自定義控件本身的佈局和內容的XAML代碼?

回答

3

自定義控件的(默認)佈局和內容由generic.xaml中的ControlTemplate定義。因此,您應該將佈局和內容放置在爲您生成的ControlTemplate元素中。 (請注意,ContentPresenter將顯示控件用戶提供的內容:您只需提供作爲模板一部分的「內容」,例如在複選框中,模板將提供小方塊,但用戶內容將提供標題)

+0

是的,我嘗試這樣做,但在這種情況下,我得到一個錯誤:「屬性'視覺樹'被設置多次」(如果我把元素放在「邊框」元素旁邊)或「 property'Child'不止一次設置「(如果我在」Border「元素中放置了兩個以上的元素)。我做錯了什麼? – rem 2009-12-05 20:30:58

+1

看來我意識到:我只是應該添加一個包裝元素,像StackPanel之類的東西。 謝謝! – rem 2009-12-05 20:38:11