2016-03-18 38 views
2

İçinde ikinci bir UserControl olan bir UserControltre oluşturduğum bir uygulama yapıyorum. Burada XML DataTemplate Ciltleme MultiLayer UserControl

ilk UserControl olduğu: UserControlDaha UserControl'ın içinde olduğunu

<UserControl x:Class="TasksMonitor.CustomControls.TaskCardBtn" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:TasksMonitor.CustomControls" 
      mc:Ignorable="d" 
      Name="TaskCardBtnCustomControl" 
      d:DesignHeight="300" d:DesignWidth="300"> 

    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../CustomButtonsStyles.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
      <Style TargetType="ToolTip"></Style> 
     </ResourceDictionary> 
    </UserControl.Resources> 

    <Button Click="OnButtonClick" Style="{DynamicResource FlatCntrlBtn}"> 
     <Grid Width="{Binding ActualWidth, ElementName=TaskCardBtnCustomControl}" VerticalAlignment="Center" HorizontalAlignment="Stretch"> 

      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="1"/> 
       <ColumnDefinition Width="15"/> 
       <ColumnDefinition Width="10"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 

      <Grid.RowDefinitions> 
       <RowDefinition Height="35"/> 
      </Grid.RowDefinitions> 

      <Canvas Margin="4,10,0,0" Grid.Column="1"> 
       <Ellipse Width="15" Height="15" Fill="{Binding Path=StatusColor, ElementName=TaskCardBtnCustomControl, FallbackValue=#FFFFFF}"/> 
      </Canvas> 
      <TextBlock VerticalAlignment="Center" x:Name="BtnTitle" Grid.Column="3" Text="{Binding Path=BtnText, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/> 
     </Grid> 
    </Button> 
</UserControl> 

:

ikinci UserControl veya Ana UserControl bir DataTemplate kullanılıyor
<UserControl x:Class="TasksMonitor.CustomControls.TaskCardUserControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:TasksMonitor" 
      xmlns:ut="clr-namespace:TasksMonitor.Utils" 
      xmlns:cc="clr-namespace:TasksMonitor.CustomControls" 
      Name="TaskCardUC" 
      mc:Ignorable="d" 
      Margin="5" 
      d:DesignHeight="35" d:DesignWidth="300"> 

    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary x:Name="Icons" Source="../Resources/Icons.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
      <ut:StatusToColorConverter x:Key="StatusToColor"/> 
     </ResourceDictionary> 
    </UserControl.Resources> 

    <Grid Width="auto"> 
     <Grid Background="#2B2B2B"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="35"/> 
       <RowDefinition Height="*"/> 
      </Grid.RowDefinitions> 

      <Grid Grid.Row="0"> 
       <cc:TaskCardBtn StatusColor="{Binding TskStatus, Converter={StaticResource StatusToColor}}" BtnText="{Binding Path=StuffYeah, ElementName=TaskCardUC}" x:Name="ExpandCollapseBtn" BtnClick="GridContentControl_Expand"/> 
      </Grid> 
      <Grid Grid.Row="1" Background="#2B2B2B" Name="GridContent" > 
       <UserControl Margin="10" Loaded="GridContentControl_Loaded"> 

       </UserControl> 
      </Grid> 

     </Grid> 

    </Grid> 
</UserControl> 

:

<Grid.Resources> 
    <DataTemplate x:Key="itemTemplate"> 
     <cc:TaskCardUserControl StuffYeah="{Binding BtnTxt}"/> 
    </DataTemplate> 
</Grid.Resources> 

Yukarıdaki DataTemplate'de gösterildiği gibi Bind'i BtnTxt olarak ayarladığımda Çalışmıyor ve TaskCardUserControl nesnesinde 'BtnTxt' bulunamadığını söylüyor. İlk UserControl özelliğinden ana özelliğe bağlı bir özelliğe sahip olduğumu ve sonra da ana özelliğin DataTemplate'e bağlı olduğundan, bunun bağlayıcı bir sorun olduğunu hissediyorum. DataTemplates ve UserControl genel olarak çok yeni, birisi bana doğru yönde işaret edebilir mi?

Şimdiden teşekkürler.

+0

DataTemplate'i nerede uygulıyorsunuz? Liste kutusu? –

+0

Öğeler içinControl –

+0

Biliyorum, ama bunun kaynağı nedir? ItemsSource nedir? –

cevap

0

Bunu çözdüm ... Aslında eski kod olan koda this.DataContext = this ayarlıyordum. Bunu bir kez açıkladım her şey gerektiği gibi çalışır. Yardım için teşekkürler.