2013-08-09 25 views
8

Bir WPF kullanıcı denetimi oluşturuyorum, onun gibi bir çok düzenin ayarlandığı bir pencere. Ancak, kullanıcıların kontrollerini yerleştirmesini istediğim birkaç bölüm var. Bunu başarmak için kullanıcı kontrolümde bazı bağımlılık özelliklerini açığa çıkarmam gerektiğine inanıyorum.WPF Kullanıcı denetiminde birden çok İçerik Sunucusu

Çıktı biraz kullanıcı denetimi

public class Class1 : UserControl 
{ 
    public ContentControl Content1 
    { 
     get { return (ContentControl)GetValue(Content1Property); } 
     set { SetValue(Content1Property, value); } 
    } 

    // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty Content1Property = 
     DependencyProperty.Register("Content1", typeof(ContentControl), typeof(Class1), null); 

    public ContentControl Content2 
    { 
     get { return (ContentControl)GetValue(Content2Property); } 
     set { SetValue(Content2Property, value); } 
    } 

    // Using a DependencyProperty as the backing store for Content2. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty Content2Property = 
     DependencyProperty.Register("Content2", typeof(ContentControl), typeof(Class1), null); 


    public ContentControl Content3 
    { 
     get { return (ContentControl)GetValue(Content3Property); } 
     set { SetValue(Content3Property, value); } 
    } 

    // Using a DependencyProperty as the backing store for Content3. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty Content3Property = 
     DependencyProperty.Register("Content3", typeof(ContentControl), typeof(Class1),null); 


} 

için bu

enter image description here

Kanunu Ve kontrolün ilgili xaml gibi olmalıdır

<Style TargetType="{x:Type userControl:Class1}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="userControl:Class1"> 
       <Grid ShowGridLines="True"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="10"></ColumnDefinition> 
         <ColumnDefinition Width="Auto"></ColumnDefinition> 
         <ColumnDefinition Width="10"></ColumnDefinition> 
         <ColumnDefinition Width="Auto"></ColumnDefinition> 
         <ColumnDefinition Width="10"></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="10"></RowDefinition> 
         <RowDefinition Height="Auto"></RowDefinition> 
         <RowDefinition Height="10"></RowDefinition> 
         <RowDefinition Height="Auto"></RowDefinition> 
         <RowDefinition Height="10"></RowDefinition> 
         <RowDefinition Height="Auto"></RowDefinition> 
         <RowDefinition Height="10"></RowDefinition> 
        </Grid.RowDefinitions> 
        <TextBlock Grid.Row="1" Grid.Column="1" Text="First Content"></TextBlock> 
        <ContentPresenter x:Name="firstContentPresenter" ContentSource="{TemplateBinding Content1}" Grid.Row="1" Grid.Column="3"></ContentPresenter> 


        <TextBlock Grid.Row="3" Grid.Column="1" Text="First Content"></TextBlock> 
        <ContentPresenter x:Name="secondContentPresenter" ContentSource="{TemplateBinding Content2}" Grid.Row="3" Grid.Column="3"></ContentPresenter> 

        <TextBlock Grid.Row="5" Grid.Column="1" Text="First Content"></TextBlock> 
        <ContentPresenter x:Name="thirdContentPresenter" ContentSource="{TemplateBinding Content3}" Grid.Row="5" Grid.Column="3"></ContentPresenter> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Ve ben çalışıyorum Bunu birazgibi kullanın Yukarıdaki kodun çıktısı hiçbir şey değildir.

enter image description here

cevap

11

Class1.cs değişiklikleri:

public class Class1 : Control { 
    public Class1() { 
    this.DefaultStyleKey = typeof(Class1); 
    } 

    public object Content1 { 
    get { return GetValue(Content1Property); } 
    set { SetValue(Content1Property, value); } 
    } 

    // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty Content1Property = 
     DependencyProperty.Register("Content1", typeof(object), typeof(Class1), null); 

    public object Content2 { 
    get { return GetValue(Content2Property); } 
    set { SetValue(Content2Property, value); } 
    } 

    // Using a DependencyProperty as the backing store for Content2. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty Content2Property = 
     DependencyProperty.Register("Content2", typeof(object), typeof(Class1), null); 


    public object Content3 { 
    get { return GetValue(Content3Property); } 
    set { SetValue(Content3Property, value); } 
    } 

    // Using a DependencyProperty as the backing store for Content3. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty Content3Property = 
     DependencyProperty.Register("Content3", typeof(object), typeof(Class1), null); 
} 

Stil değişiklikleri (Dictionary1.xaml):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:ui="clr-namespace:WpfApplication1" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
     <Style TargetType="ui:Class1"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ui:Class1"> 
         <Grid ShowGridLines="True"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="10"></ColumnDefinition> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
           <ColumnDefinition Width="10"></ColumnDefinition> 
           <ColumnDefinition Width="Auto"></ColumnDefinition> 
           <ColumnDefinition Width="10"></ColumnDefinition> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="10"></RowDefinition> 
           <RowDefinition Height="Auto"></RowDefinition> 
           <RowDefinition Height="10"></RowDefinition> 
           <RowDefinition Height="Auto"></RowDefinition> 
           <RowDefinition Height="10"></RowDefinition> 
           <RowDefinition Height="Auto"></RowDefinition> 
           <RowDefinition Height="10"></RowDefinition> 
          </Grid.RowDefinitions> 
          <TextBlock Grid.Row="1" Grid.Column="1" Text="First Content"></TextBlock> 
          <ContentPresenter x:Name="firstContentPresenter" Content="{TemplateBinding Content1}" Grid.Row="1" Grid.Column="3"></ContentPresenter> 


          <TextBlock Grid.Row="3" Grid.Column="1" Text="First Content"></TextBlock> 
          <ContentPresenter x:Name="secondContentPresenter" Content="{TemplateBinding Content2}" Grid.Row="3" Grid.Column="3"></ContentPresenter> 

          <TextBlock Grid.Row="5" Grid.Column="1" Text="First Content"></TextBlock> 
          <ContentPresenter x:Name="thirdContentPresenter" Content="{TemplateBinding Content3}" Grid.Row="5" Grid.Column="3"></ContentPresenter> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 

MainWindow.xaml:

<Window x:Class="WpfApplication1.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:ui="clr-namespace:WpfApplication1" 
      Title="MainWindow" Height="350" Width="525"> 
     <Grid> 
      <ui:Class1 Width="200" Height="200"> 
       <ui:Class1.Content1> 
        <Label x:Name="lbl">rrrr</Label> 
       </ui:Class1.Content1> 
       <ui:Class1.Content2> 
        <Label>eee</Label> 
       </ui:Class1.Content2> 
       <ui:Class1.Content3> 
        <Label>ffff</Label> 
       </ui:Class1.Content3> 
      </ui:Class1> 
     </Grid> 
    </Window> 

takılması d ictionary (App.xaml):

<Application x:Class="WpfApplication1.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Dictionary1.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 

    </Application.Resources> 
</Application> 

enter image description here

Bu benim için çalışıyor.

+0

Mayın kodlarını tamamen kendimle değiştirdim. Artık ızgara oluşturmayı bile durdurdu. Lütfen window.xaml için de kodu ekleyin, o zaman işe yarayabilir. – MegaMind

+0

@MegaMind - güncellendi. –

+0

O şeyi özlediğime inanmıyorum. Her neyse yardım için çok teşekkürler. – MegaMind

İlgili konular