2016-03-18 7 views
2

私は自分の中に2番目のUserControlを持つUserControlを作成したアプリケーションを構築しています。ここXML DataTemplate Binding MultiLayer 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に示すようにBindをBtnTxtに設定するとそれは働かないし、オブジェクトTaskCardUserControlで 'BtnTxt'を見つけることができないと言います。私は最初のUserControlからのプロパティを親プロパティにバインドし、次にその親プロパティをDataTemplateにバインドしているので、これはバインディングの問題であると感じます。私はDataTemplatesとUserControlには一般的に非常に新しいです、誰かが正しい方向に私を指すことができるでしょうか?

ありがとうございます。

+0

ここで、DataTemplateを適用していますか?リストボックス? –

+0

To ItemsControl –

+0

私は知っていますが、その源は何ですか? ItemsSourceとは何ですか? –

答えて

0

私はこれを理解しました...実際に古いコードだったコードにthis.DataContext = thisを設定しました。私が一度これをコメントアウトすると、すべてがうまくいくはずです。助けてくれてありがとう。

関連する問題