2016-03-18 32 views
2

我正在構建一個應用程序,其中我創建了一個UserControl,其中包含第二個UserControl。XML DataTemplate綁定多層UserControl

這裏是第一用戶控件:

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

即用戶控件是這個用戶控件的內部:

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

第二用戶控件或父用戶控件在一個DataTemplate被使用:

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

當我如上面的DataTemplate中所示設置綁定到BtnTxt它不起作用,並且說它無法在對象TaskCardUserControl中找到'BtnTxt'。我覺得這是一個綁定問題,因爲我從第一個UserControl綁定到父屬性的屬性,然後綁定到DataTemplate的父屬性。我對DataTemplates和UserControl非常陌生,有人能夠指出我正確的方向嗎?

在此先感謝。

+0

你在哪裏應用DataTemplate?列表框? –

+0

To ItemsControl –

+0

我知道,但它的來源是什麼?什麼是ItemsSource? –

回答

0

我想通了這個......我在代碼中設置this.DataContext = this實際上是舊代碼。一旦我評論這一切,一切正常。謝謝您的幫助。