2016-03-18 20 views
2

Ich baue eine App, in der ich ein UserControl erstellt habe, das ein zweites UserControl enthält. HierXML DataTemplate-Bindung MultiLayer UserControl

ist das erste Benutzersteuerelement:

<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> 

Das Benutzersteuerelement innerhalb dieses Benutzersteuerelementes ist:

<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> 

Das zweite Benutzersteuerelement bzw. Elternbenutzersteuerelement wird in einem Datatemplate verwendet:

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

Wenn ich die Bindung an BtnTxt wie in der DataTemplate oben dargestellt festlegen Es funktioniert nicht und sagt, dass es 'BtnTxt' im Objekt TaskCardUserControl nicht finden kann. Ich habe das Gefühl, dass dies ein bindendes Problem ist, da ich eine Eigenschaft vom ersten UserControl an die parent-Eigenschaft gebunden habe und dann diese übergeordnete Eigenschaft an die DataTemplate gebunden habe. Ich bin mit DataTemplates und UserControl im Allgemeinen sehr neu, würde mir jemand in die richtige Richtung zeigen können?

Vielen Dank im Voraus.

+0

Wo wenden Sie das DataTemplate an? Listbox? –

+0

To ItemsControl –

+0

Ich weiß, aber was ist die Quelle davon? Was ist die ItemsSource? –

Antwort

0

Ich habe das herausgefunden ... Ich habe this.DataContext = this in den Code gesetzt, der eigentlich alter Code war. Sobald ich das alles kommentiert habe, funktioniert alles wie es sollte. Danke für die Hilfe.

Verwandte Themen