Где следует разместить XAML для размещения пользовательского элемента управления в WPF? - PullRequest
1 голос
/ 05 декабря 2009

После создания пользовательского элемента управления автоматически появляется файл для кода C # - MyCustomControl.cs:

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

и файл для стиля по умолчанию - Themes \ 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 для макета и содержимого самого пользовательского элемента управления?

1 Ответ

3 голосов
/ 05 декабря 2009

Макет (по умолчанию) и содержимое пользовательского элемента управления определяется ControlTemplate в generic.xaml. Поэтому вы должны поместить макет и содержимое в элемент ControlTemplate, который был сгенерирован для вас. (Обратите внимание, что ContentPresenter будет отображать контент, предоставленный пользователями вашего элемента управления: вам нужно только предоставить «контент», который является частью вашего шаблона, например, в флажке, ваш шаблон будет предоставлять небольшой квадрат, но пользовательский контент будет обеспечивать заголовок .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...